# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'main_window.ui'
#
# Created: Mon Jul 9 17:51:13 2007
#      by: The PyQt User Interface Compiler (pyuic) 3.17
#
# WARNING! All changes made in this file will be lost!


from qt import *
from qttable import QTable
from utils import *
import sys, copy
from qtcanvas import *
from parse_xml import *
sys.path.append('.')

image0_data = \
    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
    "\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10" \
    "\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\x00\x00\x01" \
    "\xb2\x49\x44\x41\x54\x38\x8d\xcd\x90\xbd\x6b\x13" \
    "\x71\x18\xc7\x3f\x77\x89\xe7\x61\x7a\xf1\x70\x92" \
    "\xe7\x1f\x70\x10\x24\xd0\x9b\x42\x86\x18\x85\x10" \
    "\x11\xb4\x45\xf2\x17\x54\x44\x1c\x14\x87\x10\x50" \
    "\x28\x01\x15\x52\x75\x09\x62\x44\x87\x0a\x82\x43" \
    "\x97\xe8\xae\x29\x08\x22\xb8\x18\xd4\x41\x41\x09" \
    "\x4e\x1d\x14\x7b\x25\x77\xbf\x7b\x91\xe3\x5c\x92" \
    "\xd2\xd8\x28\x4e\xe2\x17\x1e\x78\xbe\xcf\xcb\x87" \
    "\x87\x07\xfe\x2b\x35\x9b\x4d\x7a\xbd\x1e\xf9\x7c" \
    "\x7e\x66\xbf\x56\xab\xe1\x38\xce\xef\x01\xc5\x62" \
    "\x91\xe1\x70\x48\xb7\xdb\x45\x44\xde\x88\x48\x3a" \
    "\x8e\xd5\x76\xbb\x4d\xa7\xd3\x21\x97\xcb\xfd\xdd" \
    "\x35\x22\x92\xde\x7e\xd1\x49\xaf\x3f\xbf\x95\x8a" \
    "\xc8\x7a\xbf\xdf\xa7\xd5\x6a\xed\x9a\xcb\xee\x34" \
    "\xab\x4f\xdf\x91\x24\x09\x4b\x8b\x05\x00\x54\x1c" \
    "\x12\xc4\x11\x00\x95\x4a\x05\x80\x43\x87\xe7\x99" \
    "\x2f\x9d\xe2\xe5\xb3\x35\xbe\x7c\x7e\x3f\x0d\xb8" \
    "\x72\xbe\xda\x03\x6c\x11\x01\xc0\x0f\x15\x2a\x0e" \
    "\x01\x0a\x22\xb2\x0e\x30\xda\xdc\x70\x0d\xeb\xe0" \
    "\x42\x92\x24\xbb\x2f\x00\x4e\x5f\x78\x74\x99\xf0" \
    "\x47\x44\x10\x47\x8c\x42\x85\x1f\x05\x94\xae\x9d" \
    "\xb0\xbd\x48\x95\xbd\x50\xf1\xe9\xe6\x6b\x0c\xc3" \
    "\x40\xd3\xf4\x99\x00\xfc\x28\x20\x88\x43\x54\x1c" \
    "\xa2\xa2\x00\x3f\x52\x78\xe1\x24\x7c\x00\xac\x39" \
    "\x0b\x4d\xd7\x66\x02\x9e\x3c\x5c\xea\xda\xe3\xbc" \
    "\xec\x2c\x1f\xc3\x0b\x15\x1f\xda\xaf\x5c\x60\x30" \
    "\xae\xbb\x79\x6b\x0e\x4d\x9b\x01\x38\xd7\xb8\xb3" \
    "\x00\xb0\x7c\x69\x11\x11\x49\x5d\x35\xc2\x0b\x7c" \
    "\x80\x41\xf9\xe4\xd9\xa3\x47\x9c\x32\xd9\x3d\x59" \
    "\x74\x4d\xdf\x06\xe8\x3b\x01\x7a\x26\x83\xb1\xd7" \
    "\xdc\xf6\xae\xbf\xc5\xa6\xbf\x05\xc0\xe3\xfb\x2d" \
    "\xee\xad\x5c\xe4\xfb\xd7\x0d\x4c\xd3\x24\xa3\xcf" \
    "\xf8\xc1\x7e\xfb\x00\xa6\xb9\x6f\x62\x07\xdf\xee" \
    "\x7e\x2c\x4c\x58\x6b\x2b\x50\x6f\xbc\xe5\x46\xa3" \
    "\x4e\xe9\xf8\x19\x82\xc0\xfb\xf5\x7d\xd3\xaa\x56" \
    "\xab\x53\xde\xb6\xe0\xc1\x55\xa8\x97\xfe\xbc\xf7" \
    "\xef\xf5\x13\x0e\xf8\xa2\x7f\xd4\xf6\xd9\x68\x00" \
    "\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82"
image1_data = \
    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
    "\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10" \
    "\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\x00\x00\x01" \
    "\x91\x49\x44\x41\x54\x38\x8d\xb5\x90\x3d\x68\x13" \
    "\x61\x00\x86\x9f\xbb\x1c\x24\x97\x40\x35\xe4\x82" \
    "\x42\xa9\x51\x2a\xa9\xd0\x0a\xc9\x24\x11\xb4\x94" \
    "\x22\x58\x44\x74\x14\x31\x15\x07\x87\x6a\xa7\x76" \
    "\x09\x55\x70\x70\xeb\x56\xe8\x10\x6c\x55\x82\x25" \
    "\x43\x96\x26\x8d\xa4\x71\x28\x54\x11\x85\x0c\x26" \
    "\xa3\x43\xb7\x0e\xa9\x46\xd3\x34\x3f\xcd\xdf\x95" \
    "\x73\xba\xab\x7a\x69\x30\x05\x5f\xf8\xe0\xfb\x79" \
    "\xdf\xe7\x7b\xbf\x0f\xfe\xa7\x6e\xdd\x1c\x38\x7e" \
    "\xf8\x7e\x70\x10\xad\x39\x89\xc7\xe3\xe8\x3d\xfc" \
    "\xfa\xc5\x65\xb4\xd2\x3d\xb4\xf0\x0d\x46\xcf\x38" \
    "\xbb\x7a\x85\xbf\x37\xd6\x57\xae\x32\x7e\xc1\x8d" \
    "\x94\xac\x20\x34\x35\xb8\xde\x07\xa7\x25\x4a\x7b" \
    "\x2d\x9c\x97\x56\x8f\x06\x84\xa3\x1f\x58\x8b\x2d" \
    "\x91\x8a\xbf\x01\x40\x0b\x5d\x33\x99\x87\x92\x45" \
    "\x66\x9f\x85\x51\x55\x95\xc7\x77\x03\x00\x48\xfa" \
    "\xe1\x4e\xa1\x4c\xe6\xe3\x7a\x56\x51\x14\x1f\x80" \
    "\x7b\x39\xdb\xb1\xf2\x93\x47\x13\xb9\xb9\xf9\x98" \
    "\x5f\x5f\x1b\x80\x6f\x85\x22\x80\xaf\x10\xba\x0d" \
    "\xd5\x06\x54\xea\x50\xde\x87\x72\x0d\x4a\xfa\xa8" \
    "\xe2\xfe\xd9\xf0\xb5\x5a\x4d\x03\x28\xea\x13\x4d" \
    "\x7f\x4d\x97\x30\xbb\x55\x00\xd4\x76\xdb\x00\x18" \
    "\x0d\x64\xd9\x06\x90\x73\x2f\xa6\x7d\x1d\xbb\x1f" \
    "\xda\x73\x07\x07\xaa\x19\xe0\xb0\xcb\x4c\x3d\x8d" \
    "\xf8\x05\x41\xa0\x59\xaf\xf1\x79\x33\x4e\xe6\x7d" \
    "\x82\x46\xbd\x6a\x98\xcf\x9e\x1f\xe6\xc1\xf4\x73" \
    "\x44\xd1\xd2\xa9\x81\x8c\x28\x8a\x7c\xf9\xf4\x8e" \
    "\x8d\xb7\x11\x8a\x3f\xf2\x7f\xdc\xed\x55\xac\xb4" \
    "\x05\x11\x9b\x6c\xc7\x6a\x93\xcd\x80\xe2\xf7\x6d" \
    "\x12\xd1\x05\xb6\xbe\x9a\x7f\x7f\xc4\xdb\x47\xfa" \
    "\xd5\x15\xc6\x1e\xe6\x71\x29\xa7\x10\x2d\x92\xc9" \
    "\xd3\x51\x27\x1c\x12\x33\x77\xce\x51\x4a\x4d\xf0" \
    "\x32\x78\xf1\xdf\x42\xbf\xab\xdf\x65\x25\x30\x7c" \
    "\xb2\xf7\x60\x2f\xfa\x05\x65\x03\x85\xc1\xd5\x1c" \
    "\xa3\x02\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42" \
    "\x60\x82"
image2_data = [
"167 148 71 2",
".# c #000000",
".R c #020202",
".T c #030303",
".W c #040404",
".Z c #050505",
".5 c #090909",
".z c #0b0b0b",
".u c #0c0c0c",
".K c #0d0d0d",
".Y c #0e0e0e",
".N c #0f0f0f",
".l c #191919",
".j c #1a1a1a",
".0 c #1b1b1b",
".P c #1d1d1d",
".V c #1e1e1e",
".A c #282828",
".t c #292929",
".7 c #2a2a2a",
".J c #2c2c2c",
".D c #2e2e2e",
".F c #313131",
".d c #323232",
".a c #343434",
".o c #373737",
".H c #383838",
".8 c #444444",
"#. c #4c4c4c",
"#d c #595959",
".f c #616161",
".p c #636363",
".2 c #656565",
".g c #666666",
".9 c #676767",
".x c #686868",
".n c #707070",
".4 c #8e8e8e",
".y c #959595",
".w c #969696",
".3 c #979797",
".h c #989898",
".O c #9b9b9b",
".e c #9d9d9d",
".v c #a7a7a7",
"#a c #b2b2b2",
"#e c #b3b3b3",
"## c #b4b4b4",
".G c #c0c0c0",
".1 c #c2c2c2",
".B c #c8c8c8",
".r c #c9c9c9",
".s c #cacaca",
".b c #cbcbcb",
".c c #cccccc",
".q c #d8d8d8",
".C c #dadada",
"#b c #dddddd",
"#c c #dedede",
".6 c #dfdfdf",
".k c #e2e2e2",
".U c #e3e3e3",
".Q c #e4e4e4",
".m c #f2f2f2",
".i c #f5f5f5",
".M c #f7f7f7",
".I c #f8f8f8",
".E c #f9f9f9",
".X c #fbfbfb",
".L c #fdfdfd",
".S c #fefefe",
"Qt c #ffffff",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQt.a.bQt.c.dQtQtQtQtQt.#.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQt.e.fQt.g.hQtQtQtQtQt.#.#.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.#.#.#Qt.i.j.k.l.mQtQtQtQt.#.#.#.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQt.n.o.pQtQtQtQtQt.#.#.#.#.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQt.q.#.rQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.s.tQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.u.vQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.#.#QtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.#.#.#.#.#.#QtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.w.x.y.z.A.BQtQtQtQt.y.z.A.BQt.g.wQtQt.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#QtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.C.D.E.F.s.G.HQtQtQtQt.F.s.G.HQt.I.J.CQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.#.#.#QtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.g.eQt.K.L.M.NQtQtQtQt.K.L.M.NQtQt.O.gQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.P.QQt.RQt.S.TQtQtQtQt.RQt.S.TQtQt.U.VQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.W.XQt.K.I.M.YQtQtQtQt.K.I.M.YQtQt.X.ZQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.0.UQt.a.1.G.aQtQtQtQt.a.1.G.aQtQt.U.0QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.2.3Qt.4.5.z.3QtQt.#Qt.4.5.z.3QtQt.3.gQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.6.7.MQtQtQtQtQtQt.8QtQtQtQtQtQt.M.7.6QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.h.9QtQtQtQtQtQtQtQtQtQtQtQtQt.9.hQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQt#.###a#.QtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQt#b.J.7#cQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.#.#.#.#QtQt#d#dQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQt#b.J.J#cQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#QtQtQt#.###e#.QtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"
]
image3_data = \
    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
    "\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10" \
    "\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\x00\x00\x01" \
    "\xb6\x49\x44\x41\x54\x38\x8d\x9d\x92\x3f\x68\x53" \
    "\x51\x14\x87\xbf\x88\xc2\x13\x02\x0d\xe2\xf0\x06" \
    "\xa1\x11\x1c\xfa\xa0\x43\x52\x2c\x68\x11\xd2\x96" \
    "\x4e\x57\x45\x1b\xb7\x96\x12\x8a\x38\x38\xeb\x96" \
    "\x41\x8b\x38\x48\x90\x46\x78\xd9\x92\x41\x30\x93" \
    "\x69\x06\x49\xde\xa0\xd8\xe1\xc1\x73\x91\x10\x97" \
    "\xa8\x50\xc8\xe8\x22\xb4\xe0\x90\xbe\x41\xf8\x39" \
    "\x3c\x93\x16\x93\xf2\xa4\x3f\x38\x70\xce\x3d\xdc" \
    "\xef\xfc\xb9\x17\x26\x2b\x07\x4c\x9d\x90\x8b\x97" \
    "\x33\xeb\x50\xad\x55\xc9\x66\xb2\xa7\x03\x54\x6b" \
    "\x55\xdc\x15\x97\x96\xd7\xc2\x4a\x5a\xff\x77\xa9" \
    "\xb7\x05\x7a\x9e\x22\xa8\x18\xf4\x43\x04\x7e\x00" \
    "\x50\x00\x04\xdc\x71\x6f\xc5\x00\xf4\x3a\xc5\x9b" \
    "\x9a\x4b\x71\xb6\x38\x3c\x9a\xb2\x92\xa9\x83\xc1" \
    "\x57\xc9\x4a\xa6\x0e\x88\xdb\x49\xeb\x21\x94\x16" \
    "\xff\xc2\x24\x80\xed\xb5\xcd\x47\x6a\xbc\xef\x6b" \
    "\x6d\xe3\xa3\x80\x27\x92\x18\xfc\x1a\x0c\xf3\xff" \
    "\x74\xf0\x12\x4a\x2b\xa3\x70\xda\xb6\xd3\x6a\x78" \
    "\x52\xdf\x97\x4a\xb5\x40\xb6\x9d\x16\x30\xad\x7d" \
    "\xa1\xc1\x11\xe0\xcc\xd0\xd9\xf9\x02\xeb\x47\xfb" \
    "\x2a\xaf\x6f\x3e\x66\xee\x27\xd4\x3e\xb7\x09\xc3" \
    "\x05\xcc\xea\x7d\x80\xf2\xa1\x75\x08\xe7\x27\x8c" \
    "\xb0\xbf\x05\xd5\xbb\x00\xe4\x9c\x99\xac\x7a\xbe" \
    "\x54\x7c\xd1\x50\xf0\x4e\x7a\x56\x91\x7a\xbe\x94" \
    "\xbe\xe2\x08\xc8\x1d\x1f\x61\xd4\x41\xb3\x0b\xf9" \
    "\x73\x51\xf5\xa5\xdb\x3b\x54\x3e\xd4\x09\x43\x43" \
    "\xf3\x5b\x1b\x03\x78\x7b\x9f\x30\xab\x6d\x80\xf2" \
    "\xf1\xc2\x23\xc0\x72\x08\x17\xde\x52\xc8\x5e\x5d" \
    "\xca\x84\xec\x62\xd2\x06\xf0\xc8\x3b\x37\xf1\xd8" \
    "\xe5\x9e\xb3\xc0\xdc\xfc\x65\xae\xdf\x70\x33\x89" \
    "\x44\xa2\x30\x06\xa8\x87\x51\x75\x67\xde\x10\xfe" \
    "\x36\x34\xbf\x37\x31\x18\xbc\xbd\x36\xd6\xd9\xe5" \
    "\xa8\x83\x19\xc8\x6f\x38\x00\x4f\xc7\x76\xd0\x59" \
    "\x04\xa0\x4b\xf4\x71\xe2\xac\x3b\x06\x28\x5e\x03" \
    "\x3d\x88\x7c\x49\x27\x5a\xe0\x07\xf4\x5f\xf5\x27" \
    "\x3c\x03\x90\xbe\x18\x03\xf0\x45\xa7\xde\xc1\xbe" \
    "\x64\x4f\x06\x9c\x46\x7f\x00\x25\x2a\xd8\x40\x88" \
    "\x85\xb0\xfb\x00\x00\x00\x00\x49\x45\x4e\x44\xae" \
    "\x42\x60\x82"
image4_data = \
    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
    "\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10" \
    "\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\x00\x00\x01" \
    "\xa9\x49\x44\x41\x54\x38\x8d\xad\x92\x3f\x48\x1b" \
    "\x71\x14\xc7\x3f\x8a\x85\x13\x02\x5e\xc0\x21\x43" \
    "\xc1\x3f\xb4\x50\xdd\x02\x1d\x4a\xc7\x8e\xd7\xa1" \
    "\x90\x73\x52\xa4\x60\x37\xa7\x80\x74\xa8\xb5\xb4" \
    "\x52\x3a\x17\x8a\xd9\xda\xad\x56\x50\x73\x88\x9c" \
    "\xd9\x92\xea\x90\x0c\x15\x3d\x68\x31\x29\x22\x22" \
    "\x58\x8e\x52\xca\x09\xb1\x9c\x83\x81\x6f\x87\x78" \
    "\xb1\x48\x0c\xa9\xf8\x85\xc7\x7b\xc3\xef\x7d\xbe" \
    "\xbc\xf7\x7e\x70\x5d\xf2\x7d\x1f\x49\x04\xbf\x82" \
    "\x7a\x0e\xea\x39\xac\x86\x8d\xdc\x52\x92\xd0\x57" \
    "\xa1\xb2\x70\x1d\x17\x05\xc2\xcd\xb9\xa8\x2c\xb6" \
    "\xbe\x6c\x21\xa9\x35\x20\x08\x02\x00\x0f\x50\x1b" \
    "\xe1\x45\x7d\x5d\x51\x11\x8f\xc7\x01\xfa\xf3\x8b" \
    "\x21\xf3\x9b\x9f\x48\xdd\x49\xf1\xf9\x67\x81\xd1" \
    "\xa4\x4d\xe1\x10\xec\x24\x14\x7e\x94\x79\x90\x18" \
    "\x66\xf0\x7e\x87\x19\xf5\x75\x46\xc5\xc9\xf1\x09" \
    "\x40\x7a\xe6\xdd\x08\x4f\x7a\x47\x71\xf6\x72\x50" \
    "\xb3\x70\x2a\x6b\x58\x40\xb6\x52\xc2\xba\x35\xcc" \
    "\xd8\xf4\x43\x80\x57\xcd\x77\x50\x16\x80\x37\x35" \
    "\xfb\x5e\x45\x47\x9a\x9a\x5d\x56\x71\x55\x7a\x9d" \
    "\xc9\x6b\xbf\x24\x4d\x3e\x9b\x13\xe0\x29\x3c\xdf" \
    "\x47\x63\x04\x4e\x81\x21\x00\xd2\xb9\x85\xcc\xba" \
    "\x69\x26\x48\x75\xd9\x38\x95\x2c\x66\xcc\x66\xfe" \
    "\x5b\x81\xdc\xd2\x07\x80\x34\xdd\xe7\xc6\x8d\x11" \
    "\xb8\x01\xdb\x9b\xdb\x00\x1b\x95\xef\xde\xca\xc0" \
    "\x9f\x38\x4e\x2d\x4b\xea\xb6\x0d\x35\x18\xf8\x6d" \
    "\x72\xb0\xe7\xad\xa8\xaa\x0d\x4e\x9b\x5c\x41\xd2" \
    "\xbf\xa7\xea\x33\x62\xa6\x26\x9e\xfa\x9a\x7c\xf1" \
    "\x51\xf9\x37\xa1\x8c\x98\x29\xa0\xef\xc2\xbb\xe6" \
    "\x80\xb3\x19\xdf\x0e\xdd\xb5\xb4\x9c\xf1\x95\xbc" \
    "\x67\x09\x78\xe9\xae\xba\xa8\x7a\x09\xe0\x22\x0c" \
    "\xe8\x31\x0c\xe3\xc8\x1a\x7f\x2e\xc3\x30\x8e\x80" \
    "\x9e\xc8\xa4\x2d\x80\xaa\x02\x78\x4c\xfd\xe3\x3c" \
    "\xd2\xae\x1a\xee\xda\x6d\x07\x70\x49\x14\x4b\x45" \
    "\xfc\x8c\x7f\x45\x40\x49\xec\x38\x3b\x24\x6e\x26" \
    "\x5a\x03\xfe\x47\x7f\x01\x69\x6f\x22\x30\xfd\xbd" \
    "\xac\x46\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42" \
    "\x60\x82"
image5_data = \
    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
    "\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10" \
    "\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\x00\x00\x01" \
    "\xd2\x49\x44\x41\x54\x38\x8d\xa5\x92\x31\x68\x53" \
    "\x51\x18\x85\xbf\xd4\x37\xbc\x2c\x92\x42\x86\x27" \
    "\x28\x5c\xa5\x43\x9f\x64\xf0\x41\x97\x96\x0c\xa6" \
    "\x14\x87\x57\x44\x48\xb6\x14\x11\x05\x07\x37\x1d" \
    "\x1c\x4a\xea\x50\x1e\x0e\x12\x1c\x02\xe9\x20\x28" \
    "\x08\xb6\x0e\xf2\x5e\x06\x89\x71\x90\x64\x10\x5a" \
    "\x41\x88\x4e\xd6\x41\x68\x82\x4a\x05\x87\x28\x59" \
    "\x9a\x21\x70\x1c\xda\x84\x50\xaa\xb5\xfa\xc3\xe1" \
    "\x0e\xff\x3d\xdf\xbd\xff\xbd\x07\xfe\xb3\x8e\xfd" \
    "\xae\x91\xbf\x9c\x27\x79\x3c\x49\xfb\x73\xfb\xc8" \
    "\xd0\xf7\x40\x0b\xb8\xa2\xae\x58\x5d\x5c\x3d\xdc" \
    "\x21\x89\xce\xf7\x0e\x92\x70\x53\x9e\xb6\xd7\xa4" \
    "\xcc\x5c\x56\x03\x90\x3b\xe9\x1e\x02\xd8\x12\xea" \
    "\x8a\xb0\x12\x62\x26\x0a\x2a\x3f\x92\xb6\xdf\x4a" \
    "\x41\x29\x54\x70\xfe\xe1\x10\x74\x90\x77\x0c\x20" \
    "\x76\x26\xc6\xcc\x85\x19\x5a\x9f\x5a\xf4\x7a\x15" \
    "\xdc\xaf\x3b\xdc\x7f\x15\xd1\xeb\xe7\xe8\x5d\x74" \
    "\xa8\xdf\xe9\x18\xf7\x5c\xe6\xf1\x41\xa0\x31\x80" \
    "\x60\x39\x60\xe3\xcd\x06\x71\x2b\x0e\x16\x44\xbd" \
    "\x0a\x99\x93\x3e\x3f\x7e\xae\x31\xeb\xcc\x12\x59" \
    "\x0d\xca\xb7\x5f\x90\xbf\x51\x34\x6e\x6a\x7a\x00" \
    "\xba\x04\x10\x03\x30\xc6\xb0\xf9\x6e\x93\xf8\x78" \
    "\x9c\x13\xa7\xce\x6a\xe1\x7a\x93\x1d\x6a\xe4\xf0" \
    "\x89\xa8\x11\xb7\x7c\xe8\xd7\xf0\xf1\x89\xfa\x15" \
    "\xda\xed\x8f\xd4\x9e\xdc\x6d\x03\xa7\xc7\x00\x96" \
    "\x16\x97\x98\xcf\xce\xc3\x17\xb0\xed\x2c\xb6\xdd" \
    "\x60\xc1\xcb\xd1\xd8\x5b\x6d\xbb\x41\xd6\xcb\x11" \
    "\xf5\x9e\x32\xfe\xf2\xdb\xc0\x7c\xd3\x19\xfd\x85" \
    "\xf0\x59\x88\x31\x06\xc7\xb8\x6a\x96\xa4\x42\xa9" \
    "\xae\x60\x45\x0a\x56\xea\xaa\x2f\x77\xe4\x4d\x65" \
    "\x86\x8f\x99\xb0\x60\xdd\x06\x6f\x14\xa0\xae\xa8" \
    "\x3e\xaf\x62\x26\x3d\x15\x1f\xac\xeb\xc3\x6b\xa9" \
    "\x70\x2f\xd4\x74\xba\x3c\x34\x16\x53\xa0\x34\x54" \
    "\x13\xd0\xb1\xf6\xe5\x60\x20\x33\xe1\x29\x28\x49" \
    "\x5e\xda\x1f\x1a\x35\x07\x85\xc4\xee\x5e\x6f\x4f" \
    "\xf6\xfe\x20\x0d\xc4\x48\x12\xab\xb7\x60\xab\x04" \
    "\x8e\x0d\x4a\x8e\x5c\xf9\x6f\x4b\x57\xe1\x5a\x1a" \
    "\x12\x16\x84\xf6\x3f\x00\xb2\x49\xd0\x14\x34\x9d" \
    "\xdd\x99\x13\x47\x05\x00\x38\xfc\xf9\xe4\x5f\x8e" \
    "\x8f\xd6\xca\x36\x0c\x26\x66\x00\x00\x00\x00\x49" \
    "\x45\x4e\x44\xae\x42\x60\x82"
image6_data = \
    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
    "\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10" \
    "\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\x00\x00\x02" \
    "\x3e\x49\x44\x41\x54\x38\x8d\xad\x91\x4f\x48\x93" \
    "\x71\x18\xc7\x3f\xd6\x0e\xef\xe4\x0d\xdf\x91\xc1" \
    "\x12\x89\x0d\x0c\x1c\x74\xe8\x15\x3a\x4c\x3a\xb4" \
    "\x9d\x62\x0a\xc9\x3b\xba\xcc\xc3\x74\xe2\x25\x90" \
    "\x90\xd1\x41\x34\x2a\xcc\x43\x89\x90\xe0\x02\x0f" \
    "\x66\x03\xf5\x52\x1b\x52\xb9\x4b\xec\x35\x04\xf3" \
    "\xe0\xc1\xfe\x69\x17\xd9\x3b\x4a\x4c\x68\xf8\x4a" \
    "\x8c\xed\x3d\xbc\xf0\xeb\xb0\xb4\xe0\xf5\x10\xd4" \
    "\x73\xfa\x1e\x3e\xcf\xc3\xe7\xe1\x0b\xff\x7b\x7c" \
    "\xcd\x12\xe2\x4b\xe4\xaf\xf9\x13\x87\x61\xf8\xe2" \
    "\x14\x6a\xab\x82\xf1\x76\x0a\x66\x41\xac\x8c\x33" \
    "\x77\x5b\xc5\xe7\x55\x00\x1a\x80\x3b\x80\x09\x6c" \
    "\x04\x2f\x6b\xce\x4b\x5e\x19\x44\x7f\x00\x31\x18" \
    "\x42\x0c\x86\xa8\x0c\x04\x11\x43\x11\x80\x9b\x8a" \
    "\xac\x98\xda\xf5\x84\xc8\xdf\xab\x08\x40\x24\x6f" \
    "\xed\x1f\xed\xb9\x0e\x83\xc7\xab\xe2\x9f\xdd\x60" \
    "\xab\xd5\xc4\xdd\x22\x51\xbf\x58\x8c\x4b\xb2\x72" \
    "\x77\x6e\x2c\xef\x3b\x68\x0e\xa3\x9e\x82\x99\xb5" \
    "\x19\x00\xcc\x52\xca\xf9\x42\x40\x0d\x12\x1d\x28" \
    "\x50\xff\x69\x2f\xee\x79\x73\x60\xc4\x7a\x93\x4f" \
    "\x0b\x2b\xa6\xcf\x90\xab\x04\x76\xaa\xcc\xac\xcf" \
    "\x83\xab\xa6\xde\xd7\x3c\xe2\x34\xc8\x3e\x7b\x7c" \
    "\x4d\x91\x17\x1e\x3d\x7f\x90\xf7\x59\x01\x85\x48" \
    "\x4b\x1b\xa9\x65\x68\x3f\x1b\x26\xf3\x39\x47\xf7" \
    "\x05\x8d\xdc\x76\xae\xc6\xda\x19\xa7\x01\xb0\xb8" \
    "\x95\x32\x7d\xa8\x5e\xda\xbf\xb7\x31\xf1\x7a\x89" \
    "\xb0\x05\x39\x23\x87\x47\x8a\xa2\xef\xe8\x68\x72" \
    "\xb4\x46\xda\x91\x63\x0f\x74\x35\xc5\xeb\x8a\xc6" \
    "\xc3\x35\xe6\xcb\x4b\x68\x81\x0e\x74\x97\x4e\x4c" \
    "\x8d\x22\xc9\x10\xbb\xd4\x81\x2e\xeb\x00\x54\xad" \
    "\xac\xb3\x85\x48\x67\x82\x42\x4a\x00\xc4\x25\x59" \
    "\x31\x42\x9d\x31\x31\x3a\x21\xc4\xf8\xf4\xaa\x28" \
    "\xa4\x85\x18\x4f\xaf\x8a\xc2\xbc\x10\x80\xb8\x31" \
    "\xf0\xbb\x85\x23\x03\xcd\xa5\x91\xb1\x61\xf3\x85" \
    "\x48\x27\x7a\xef\xfb\x97\x5f\x2d\xf4\x8c\x0d\xbb" \
    "\x8b\xee\x97\xdf\xc8\xd8\x3a\x7d\x6a\x3b\xba\xbb" \
    "\xc6\x5a\xc7\x1a\x5c\x4d\xb0\x39\x21\x18\x1d\xcb" \
    "\x33\x3c\x54\xa0\xf2\xa3\x42\xe8\x8a\x76\x64\x14" \
    "\xe9\x4a\x88\xdd\x5f\x06\x89\xfe\x5d\xa7\x81\xb1" \
    "\xbd\x41\xd6\xd6\x89\x9c\x0f\x63\x59\x19\xdc\x92" \
    "\x1b\xb7\xe2\x45\x54\x44\xba\xba\x62\xfa\x73\x8b" \
    "\x4f\x7a\x9a\xba\xeb\x8a\xc0\xbb\x3f\x0d\x4e\x1e" \
    "\x86\xd2\xfe\x1e\x07\xa5\x12\xb6\xa2\xf0\x75\xf7" \
    "\x1c\x9e\x06\x83\xbe\xc6\x28\xeb\xe6\x3a\x7e\xaf" \
    "\x9f\xb2\xab\xfc\xde\xa3\x04\x26\xe5\xc6\xe0\xf4" \
    "\x99\xd3\x71\x3e\x7e\x98\x04\xa0\xce\xf9\x0c\x48" \
    "\xb2\x44\xd2\x97\x24\x4b\x16\x09\x09\xcb\xb6\xa8" \
    "\x96\xab\x14\x77\x8a\xc7\xe1\xff\x36\x3f\x01\xb1" \
    "\xdd\xe6\x7f\x68\x91\x09\xdd\x00\x00\x00\x00\x49" \
    "\x45\x4e\x44\xae\x42\x60\x82"
image8_data = \
    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
    "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \
    "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x00" \
    "\x90\x49\x44\x41\x54\x38\x8d\xed\x95\x4b\x0e\x84" \
    "\x20\x10\x44\x0b\x33\x87\xb1\x13\x37\x9c\x51\xc7" \
    "\x43\x79\x09\x36\x46\x3c\x81\xd7\xa8\x59\x8d\x31" \
    "\xda\x7c\x82\x71\x61\xc2\x4b\xd8\x74\xa7\x1f\x05" \
    "\x2c\x00\x1e\xc2\x28\x35\xde\x98\xdd\x69\xb4\x22" \
    "\xc9\xe0\x02\x00\xe9\x24\x19\x40\x15\xa7\xb0\xd6" \
    "\x26\xe5\x45\x62\x69\x05\xcb\xb4\x44\xe5\xea\x1d" \
    "\xff\x8f\xac\x0e\x18\x03\x92\x18\xc6\x01\x7e\xf5" \
    "\x70\xce\xc1\xcf\x3e\xe4\xba\x88\x83\x1c\xfb\xfd" \
    "\xb7\x27\x37\x52\x3a\xe1\x39\x79\x51\xe2\x08\x7b" \
    "\xf3\x93\x8a\xaf\xec\x9a\xb5\x61\xd1\xe3\xe5\x50" \
    "\xc5\x55\x5c\xc5\x11\xee\xfc\x20\xb9\xbe\x97\xf0" \
    "\x03\xcf\x4e\x64\xbb\xc5\x17\xa1\x28\x00\x00\x00" \
    "\x00\x49\x45\x4e\x44\xae\x42\x60\x82"
image9_data = \
    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
    "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \
    "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x00" \
    "\xa6\x49\x44\x41\x54\x38\x8d\xed\x94\xc1\x12\x83" \
    "\x20\x0c\x44\x5f\x18\x3f\xbb\x9d\x8e\x63\xff\x7b" \
    "\x7b\x40\x11\x15\x29\x30\xe9\xad\x7b\x59\x49\xcc" \
    "\x66\xd9\x03\xf0\xc7\x0a\x1b\x98\xd1\x17\x0d\x8d" \
    "\xe8\x9e\x45\xb7\x9a\xce\xdf\x23\x8e\x5b\x96\x5a" \
    "\xf8\x81\x28\x00\xd3\x4d\xa3\xe7\x26\xa5\x78\x30" \
    "\x40\xd2\xd6\x37\x40\x98\x35\xeb\xde\xfe\x38\xed" \
    "\x4b\x2d\x71\xdc\x64\x97\x7a\xcf\xf2\x90\x19\xef" \
    "\xe4\x3a\x42\xc9\x71\x1b\xd7\x51\xcc\x78\x20\xeb" \
    "\x0b\x8a\x19\xe7\xa2\xcb\x0c\x0f\xe0\x9d\x0d\xd5" \
    "\xce\xcf\xd7\x5e\x97\x84\x22\x22\xaf\x1b\xb4\xcc" \
    "\xb1\xd7\xca\xdb\x5c\x16\x85\xab\xd3\x94\x9f\xab" \
    "\xd3\x5c\x5d\x92\xaf\xd3\xe4\xd8\xd3\xe9\xc1\xb1" \
    "\xb7\xd3\x83\xf0\x20\x3c\x9f\xdd\x36\x7c\x00\x13" \
    "\x95\xcb\xf1\xf6\xe1\x70\x52\x00\x00\x00\x00\x49" \
    "\x45\x4e\x44\xae\x42\x60\x82"
image10_data = \
    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
    "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \
    "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x00" \
    "\xea\x49\x44\x41\x54\x38\x8d\xb5\x94\x5d\x0e\x83" \
    "\x20\x10\x84\x87\x1e\xcb\xa4\x37\xb3\x69\xfc\x39" \
    "\x53\x0f\x80\x81\xb7\x3e\xf6\x3c\xd3\x07\xc4\x02" \
    "\x22\x2b\x6a\x27\x21\xb0\x91\x59\x3e\x37\xb0\xc0" \
    "\x9f\xa4\xe6\x99\x57\xe7\xbd\xf9\x15\x09\x0c\x9d" \
    "\x5b\x1b\x6d\x40\x12\xd4\x04\x49\x31\x76\x7e\x17" \
    "\xa7\xe2\xd0\x81\xec\x40\xb7\x87\x34\xda\xec\x9e" \
    "\x01\x2c\x71\xfa\xf7\x24\x5d\x72\x00\xa4\x66\x64" \
    "\x96\xe2\x39\x59\x38\x62\xe2\x21\x43\xfc\x7e\x7d" \
    "\x76\x11\x87\xfe\x4d\xe2\x94\xcc\x27\xdf\x22\x4f" \
    "\xfd\x97\xd6\x38\xf4\x5f\x5a\xe3\x22\x71\xae\xc6" \
    "\x35\xc4\xd5\x35\x96\xe2\x1c\xb1\x0a\x88\xd1\x02" \
    "\x18\x01\x3c\x9e\xab\x7b\x5e\x94\x7f\x58\x2d\x00" \
    "\xe5\xbc\x3e\xef\xef\xc4\xb3\x73\x96\xd8\xcb\x93" \
    "\x1f\x89\x1f\x25\x62\xac\x5f\x92\x38\x52\xe2\xa5" \
    "\x09\x8d\xfd\x7c\x72\x2f\x55\xd4\xc9\x37\x22\xa3" \
    "\x4d\xe4\x4f\x55\x4d\x2c\xdd\xe3\x88\x38\x9c\x25" \
    "\xd9\xc9\xa2\xb9\x37\xb0\x93\x2d\xfa\x0e\x11\x57" \
    "\xf5\x8a\xe0\x63\x71\x48\xbd\x42\x85\xc9\xf7\x15" \
    "\x41\x94\x92\xb7\x9c\xd0\x17\xcf\x6b\xce\xea\xd6" \
    "\x61\x39\x6d\x00\x00\x00\x00\x49\x45\x4e\x44\xae" \
    "\x42\x60\x82"

class editor(QMainWindow):
    def __init__(self,parent = None,name = None,fl = 0):
        QMainWindow.__init__(self,parent,name,fl)
        self.statusBar()

        self.image0 = QPixmap()
        self.image0.loadFromData(image0_data,"PNG")
        self.image1 = QPixmap()
        self.image1.loadFromData(image1_data,"PNG")
        self.image3 = QPixmap()
        self.image3.loadFromData(image3_data,"PNG")
        self.image4 = QPixmap()
        self.image4.loadFromData(image4_data,"PNG")
        self.image5 = QPixmap()
        self.image5.loadFromData(image5_data,"PNG")
        self.image6 = QPixmap()
        self.image6.loadFromData(image6_data,"PNG")
        self.image8 = QPixmap()
        self.image8.loadFromData(image8_data,"PNG")
        self.image9 = QPixmap()
        self.image9.loadFromData(image9_data,"PNG")
        self.image10 = QPixmap()
        self.image10.loadFromData(image10_data,"PNG")
        self.image2 = QPixmap(image2_data)

        if not name:
            self.setName("editor")


        self.setCentralWidget(QWidget(self,"qt_central_widget"))
        editorLayout = QHBoxLayout(self.centralWidget(),11,6,"editorLayout")

        self.QT_tree = QListView(self.centralWidget(),"QT_tree")
        self.QT_tree.addColumn(QString.null)
        self.QT_tree.setSizePolicy(QSizePolicy(QSizePolicy.Preferred,QSizePolicy.Preferred,0,0,self.QT_tree.sizePolicy().hasHeightForWidth()))
        self.QT_tree.setFrameShape(QListView.LineEditPanel)
        self.QT_tree.setFrameShadow(QListView.Plain)
        self.QT_tree.setLineWidth(2)
        self.QT_tree.setMargin(0)
        self.QT_tree.setMidLineWidth(1)
        self.QT_tree.setAllColumnsShowFocus(0)
        self.QT_tree.setShowSortIndicator(0)
        self.QT_tree.setItemMargin(1)
        self.QT_tree.setRootIsDecorated(1)
        self.QT_tree.setTreeStepSize(35)
        editorLayout.addWidget(self.QT_tree)

        self.stack = QWidgetStack(self.centralWidget(),"stack")
        self.stack.setSizePolicy(QSizePolicy(QSizePolicy.Preferred,QSizePolicy.Preferred,0,0,self.stack.sizePolicy().hasHeightForWidth()))

        self.source_edit_page = QWidget(self.stack,"source_edit_page")
        source_edit_pageLayout = QGridLayout(self.source_edit_page,1,1,11,6,"source_edit_pageLayout")

        self.source = QGroupBox(self.source_edit_page,"source")
        self.source.setColumnLayout(0,Qt.Vertical)
        self.source.layout().setSpacing(6)
        self.source.layout().setMargin(11)
        sourceLayout = QGridLayout(self.source.layout())
        sourceLayout.setAlignment(Qt.AlignTop)

        self.source_param = QLineEdit(self.source,"source_param")

        sourceLayout.addMultiCellWidget(self.source_param,6,6,1,2)

        self.source_source_activation_frequency = QLineEdit(self.source,"source_source_activation_frequency")

        sourceLayout.addMultiCellWidget(self.source_source_activation_frequency,4,4,1,2)

        self.textLabel1_4_2 = QLabel(self.source,"textLabel1_4_2")
        self.textLabel1_4_2.setTextFormat(QLabel.LogText)

        sourceLayout.addWidget(self.textLabel1_4_2,4,0)

        self.source_first_activation_at = QLineEdit(self.source,"source_first_activation_at")

        sourceLayout.addMultiCellWidget(self.source_first_activation_at,1,1,1,2)

        self.textLabel1_3_2 = QLabel(self.source,"textLabel1_3_2")

        sourceLayout.addWidget(self.textLabel1_3_2,3,0)

        self.source_located_at_node = QComboBox(0,self.source,"source_located_at_node")

        sourceLayout.addMultiCellWidget(self.source_located_at_node,2,2,1,2)

        self.textLabel1_4_2_2 = QLabel(self.source,"textLabel1_4_2_2")
        self.textLabel1_4_2_2.setTextFormat(QLabel.LogText)

        sourceLayout.addWidget(self.textLabel1_4_2_2,5,0)

        self.source_target_laneset = QComboBox(0,self.source,"source_target_laneset")

        sourceLayout.addMultiCellWidget(self.source_target_laneset,3,3,1,2)

        self.source_source_id = QLabel(self.source,"source_source_id")
        self.source_source_id.setPaletteBackgroundColor(QColor(219,233,214))
        self.source_source_id.setBackgroundOrigin(QLabel.WidgetOrigin)
        self.source_source_id.setFrameShape(QLabel.Box)

        sourceLayout.addMultiCellWidget(self.source_source_id,0,0,1,2)

        self.textLabel1_5_3 = QLabel(self.source,"textLabel1_5_3")

        sourceLayout.addWidget(self.textLabel1_5_3,0,0)

        self.textLabel1_2_2 = QLabel(self.source,"textLabel1_2_2")
        self.textLabel1_2_2.setBackgroundOrigin(QLabel.WidgetOrigin)

        sourceLayout.addWidget(self.textLabel1_2_2,2,0)

        self.textLabel1_5 = QLabel(self.source,"textLabel1_5")

        sourceLayout.addWidget(self.textLabel1_5,1,0)

        self.param_caption = QLabel(self.source,"param_caption")
        self.param_caption.setTextFormat(QLabel.LogText)

        sourceLayout.addWidget(self.param_caption,6,0)

        self.create_source_btn1 = QPushButton(self.source,"create_source_btn1")

        sourceLayout.addMultiCellWidget(self.create_source_btn1,9,9,0,2)
        spacer47 = QSpacerItem(20,40,QSizePolicy.Minimum,QSizePolicy.Expanding)
        sourceLayout.addItem(spacer47,8,1)

        self.source_source_type = QComboBox(0,self.source,"source_source_type")

        sourceLayout.addMultiCellWidget(self.source_source_type,5,5,1,2)

        self.source_source_variable = QTable(self.source,"source_source_variable")
        self.source_source_variable.setNumCols(self.source_source_variable.numCols() + 1)
        self.source_source_variable.horizontalHeader().setLabel(self.source_source_variable.numCols() - 1,self.__tr("Number of iterations"))
        self.source_source_variable.setNumCols(self.source_source_variable.numCols() + 1)
        self.source_source_variable.horizontalHeader().setLabel(self.source_source_variable.numCols() - 1,self.__tr("Flow"))
        self.source_source_variable.setNumRows(3)
        self.source_source_variable.setNumCols(2)
        self.source_source_variable.setSelectionMode(QTable.SingleRow)

        sourceLayout.addMultiCellWidget(self.source_source_variable,7,7,0,1)

        var_source_layout_btns = QVBoxLayout(None,0,6,"var_source_layout_btns")

        self.add_source_rule_btn = QToolButton(self.source,"add_source_rule_btn")
        self.add_source_rule_btn.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.add_source_rule_btn.sizePolicy().hasHeightForWidth()))
        self.add_source_rule_btn.setIconSet(QIconSet(self.image0))
        var_source_layout_btns.addWidget(self.add_source_rule_btn)

        self.del_source_rule_btn = QToolButton(self.source,"del_source_rule_btn")
        self.del_source_rule_btn.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.del_source_rule_btn.sizePolicy().hasHeightForWidth()))
        self.del_source_rule_btn.setIconSet(QIconSet(self.image1))
        var_source_layout_btns.addWidget(self.del_source_rule_btn)

        sourceLayout.addLayout(var_source_layout_btns,7,2)

        source_edit_pageLayout.addWidget(self.source,0,0)
        self.stack.addWidget(self.source_edit_page,0)

        self.sink_edit_page = QWidget(self.stack,"sink_edit_page")
        sink_edit_pageLayout = QGridLayout(self.sink_edit_page,1,1,11,6,"sink_edit_pageLayout")

        self.sink = QGroupBox(self.sink_edit_page,"sink")
        self.sink.setColumnLayout(0,Qt.Vertical)
        self.sink.layout().setSpacing(6)
        self.sink.layout().setMargin(11)
        sinkLayout = QGridLayout(self.sink.layout())
        sinkLayout.setAlignment(Qt.AlignTop)

        self.textLabel1_5_2 = QLabel(self.sink,"textLabel1_5_2")

        sinkLayout.addWidget(self.textLabel1_5_2,0,0)

        self.textLabel1_5_2_2 = QLabel(self.sink,"textLabel1_5_2_2")

        sinkLayout.addMultiCellWidget(self.textLabel1_5_2_2,1,1,0,1)

        self.sink_first_activation_at = QLineEdit(self.sink,"sink_first_activation_at")

        sinkLayout.addWidget(self.sink_first_activation_at,1,2)

        self.textLabel1_3_2_2 = QLabel(self.sink,"textLabel1_3_2_2")

        sinkLayout.addWidget(self.textLabel1_3_2_2,4,0)

        self.sink_located_at_node = QComboBox(0,self.sink,"sink_located_at_node")

        sinkLayout.addWidget(self.sink_located_at_node,3,2)

        self.sink_source_laneset = QComboBox(0,self.sink,"sink_source_laneset")

        sinkLayout.addMultiCellWidget(self.sink_source_laneset,4,4,1,2)

        self.textLabel1_2_2_2 = QLabel(self.sink,"textLabel1_2_2_2")
        self.textLabel1_2_2_2.setBackgroundOrigin(QLabel.WidgetOrigin)

        sinkLayout.addMultiCellWidget(self.textLabel1_2_2_2,3,3,0,1)

        self.sink_removal_probability = QLineEdit(self.sink,"sink_removal_probability")

        sinkLayout.addWidget(self.sink_removal_probability,2,2)

        self.textLabel1_4_2_3 = QLabel(self.sink,"textLabel1_4_2_3")
        self.textLabel1_4_2_3.setTextFormat(QLabel.LogText)

        sinkLayout.addMultiCellWidget(self.textLabel1_4_2_3,2,2,0,1)

        self.sink_sink_id = QLabel(self.sink,"sink_sink_id")
        self.sink_sink_id.setPaletteBackgroundColor(QColor(219,233,214))
        self.sink_sink_id.setBackgroundOrigin(QLabel.WidgetOrigin)
        self.sink_sink_id.setFrameShape(QLabel.Box)

        sinkLayout.addWidget(self.sink_sink_id,0,2)

        self.create_sink_btn1 = QPushButton(self.sink,"create_sink_btn1")

        sinkLayout.addMultiCellWidget(self.create_sink_btn1,6,6,0,2)
        spacer49 = QSpacerItem(20,40,QSizePolicy.Minimum,QSizePolicy.Expanding)
        sinkLayout.addItem(spacer49,5,2)

        sink_edit_pageLayout.addWidget(self.sink,0,0)
        self.stack.addWidget(self.sink_edit_page,1)

        self.settings_edit_page = QWidget(self.stack,"settings_edit_page")
        settings_edit_pageLayout = QGridLayout(self.settings_edit_page,1,1,11,6,"settings_edit_pageLayout")

        self.settings = QGroupBox(self.settings_edit_page,"settings")
        self.settings.setColumnLayout(0,Qt.Vertical)
        self.settings.layout().setSpacing(6)
        self.settings.layout().setMargin(11)
        settingsLayout = QGridLayout(self.settings.layout())
        settingsLayout.setAlignment(Qt.AlignTop)

        self.textLabel1_2_10 = QLabel(self.settings,"textLabel1_2_10")

        settingsLayout.addWidget(self.textLabel1_2_10,2,0)

        self.settings_cars_maximum_speed = QLineEdit(self.settings,"settings_cars_maximum_speed")

        settingsLayout.addWidget(self.settings_cars_maximum_speed,4,1)

        self.settings_cell_size_in_meters = QLineEdit(self.settings,"settings_cell_size_in_meters")

        settingsLayout.addWidget(self.settings_cell_size_in_meters,2,1)

        self.textLabel1_5_33 = QLabel(self.settings,"textLabel1_5_33")
        self.textLabel1_5_33.setTextFormat(QLabel.LogText)

        settingsLayout.addWidget(self.textLabel1_5_33,4,0)

        self.settings_iteration_length_in_seconds = QLineEdit(self.settings,"settings_iteration_length_in_seconds")

        settingsLayout.addWidget(self.settings_iteration_length_in_seconds,6,1)

        self.textLabel1_4_3_2_2_2 = QLabel(self.settings,"textLabel1_4_3_2_2_2")
        self.textLabel1_4_3_2_2_2.setTextFormat(QLabel.LogText)

        settingsLayout.addWidget(self.textLabel1_4_3_2_2_2,6,0)

        settings_edit_pageLayout.addWidget(self.settings,0,0)
        self.stack.addWidget(self.settings_edit_page,2)

        self.street_edit_page = QWidget(self.stack,"street_edit_page")
        street_edit_pageLayout = QGridLayout(self.street_edit_page,1,1,11,6,"street_edit_pageLayout")

        self.street = QGroupBox(self.street_edit_page,"street")
        self.street.setColumnLayout(0,Qt.Vertical)
        self.street.layout().setSpacing(6)
        self.street.layout().setMargin(11)
        streetLayout = QGridLayout(self.street.layout())
        streetLayout.setAlignment(Qt.AlignTop)

        self.textLabel1_2_5 = QLabel(self.street,"textLabel1_2_5")
        self.textLabel1_2_5.setBackgroundOrigin(QLabel.WidgetOrigin)

        streetLayout.addWidget(self.textLabel1_2_5,0,0)

        self.street_street_name = QLineEdit(self.street,"street_street_name")

        streetLayout.addWidget(self.street_street_name,1,1)

        self.textLabel1_2_56 = QLabel(self.street,"textLabel1_2_56")

        streetLayout.addWidget(self.textLabel1_2_56,1,0)

        self.street_street_id = QLabel(self.street,"street_street_id")
        self.street_street_id.setPaletteBackgroundColor(QColor(219,233,214))
        self.street_street_id.setBackgroundOrigin(QLabel.WidgetOrigin)
        self.street_street_id.setFrameShape(QLabel.Box)

        streetLayout.addWidget(self.street_street_id,0,1)

        self.create_section_btn = QPushButton(self.street,"create_section_btn")

        streetLayout.addMultiCellWidget(self.create_section_btn,3,3,0,1)
        spacer50 = QSpacerItem(20,40,QSizePolicy.Minimum,QSizePolicy.Expanding)
        streetLayout.addItem(spacer50,2,1)

        street_edit_pageLayout.addWidget(self.street,0,0)
        self.stack.addWidget(self.street_edit_page,3)

        self.laneset_edit_page = QWidget(self.stack,"laneset_edit_page")
        laneset_edit_pageLayout = QGridLayout(self.laneset_edit_page,1,1,11,6,"laneset_edit_pageLayout")

        self.laneset = QGroupBox(self.laneset_edit_page,"laneset")
        self.laneset.setColumnLayout(0,Qt.Vertical)
        self.laneset.layout().setSpacing(6)
        self.laneset.layout().setMargin(11)
        lanesetLayout = QGridLayout(self.laneset.layout())
        lanesetLayout.setAlignment(Qt.AlignTop)

        self.textLabel1_2_6 = QLabel(self.laneset,"textLabel1_2_6")
        self.textLabel1_2_6.setBackgroundOrigin(QLabel.WidgetOrigin)

        lanesetLayout.addWidget(self.textLabel1_2_6,1,0)

        self.textLabel1_3_6 = QLabel(self.laneset,"textLabel1_3_6")

        lanesetLayout.addWidget(self.textLabel1_3_6,2,0)

        self.textLabel1_4_6 = QLabel(self.laneset,"textLabel1_4_6")
        self.textLabel1_4_6.setTextFormat(QLabel.LogText)

        lanesetLayout.addWidget(self.textLabel1_4_6,3,0)

        self.laneset_laneset_position = QLineEdit(self.laneset,"laneset_laneset_position")

        lanesetLayout.addWidget(self.laneset_laneset_position,1,1)

        self.laneset_start_node = QComboBox(0,self.laneset,"laneset_start_node")

        lanesetLayout.addWidget(self.laneset_start_node,2,1)

        self.laneset_end_node = QComboBox(0,self.laneset,"laneset_end_node")

        lanesetLayout.addWidget(self.laneset_end_node,3,1)

        self.textLabel1_9 = QLabel(self.laneset,"textLabel1_9")

        lanesetLayout.addWidget(self.textLabel1_9,0,0)

        self.laneset_laneset_id = QLabel(self.laneset,"laneset_laneset_id")
        self.laneset_laneset_id.setPaletteBackgroundColor(QColor(219,233,214))
        self.laneset_laneset_id.setBackgroundOrigin(QLabel.WidgetOrigin)
        self.laneset_laneset_id.setFrameShape(QLabel.Box)

        lanesetLayout.addWidget(self.laneset_laneset_id,0,1)
        spacer51 = QSpacerItem(20,40,QSizePolicy.Minimum,QSizePolicy.Expanding)
        lanesetLayout.addItem(spacer51,7,1)

        self.create_lane_btn = QPushButton(self.laneset,"create_lane_btn")

        lanesetLayout.addMultiCellWidget(self.create_lane_btn,8,8,0,1)
        spacer52 = QSpacerItem(20,20,QSizePolicy.Minimum,QSizePolicy.Preferred)
        lanesetLayout.addItem(spacer52,4,1)

        self.textLabel1 = QLabel(self.laneset,"textLabel1")

        lanesetLayout.addMultiCellWidget(self.textLabel1,5,5,0,1)

        layout14 = QHBoxLayout(None,0,6,"layout14")

        self.laneset_turning_probabilities = QTable(self.laneset,"laneset_turning_probabilities")
        self.laneset_turning_probabilities.setNumCols(self.laneset_turning_probabilities.numCols() + 1)
        self.laneset_turning_probabilities.horizontalHeader().setLabel(self.laneset_turning_probabilities.numCols() - 1,self.__tr("Destination"))
        self.laneset_turning_probabilities.setNumCols(self.laneset_turning_probabilities.numCols() + 1)
        self.laneset_turning_probabilities.horizontalHeader().setLabel(self.laneset_turning_probabilities.numCols() - 1,self.__tr("Probability"))
        self.laneset_turning_probabilities.setSizePolicy(QSizePolicy(QSizePolicy.Preferred,QSizePolicy.Preferred,0,0,self.laneset_turning_probabilities.sizePolicy().hasHeightForWidth()))
        self.laneset_turning_probabilities.setMinimumSize(QSize(0,200))
        self.laneset_turning_probabilities.setFrameShape(QTable.StyledPanel)
        self.laneset_turning_probabilities.setResizePolicy(QTable.Default)
        self.laneset_turning_probabilities.setNumRows(10)
        self.laneset_turning_probabilities.setNumCols(2)
        self.laneset_turning_probabilities.setSelectionMode(QTable.Single)
        layout14.addWidget(self.laneset_turning_probabilities)
        spacer21_2 = QSpacerItem(120,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
        layout14.addItem(spacer21_2)

        lanesetLayout.addMultiCellLayout(layout14,6,6,0,1)

        laneset_edit_pageLayout.addWidget(self.laneset,0,0)
        self.stack.addWidget(self.laneset_edit_page,4)

        self.lane_edit_page = QWidget(self.stack,"lane_edit_page")
        lane_edit_pageLayout = QGridLayout(self.lane_edit_page,1,1,11,6,"lane_edit_pageLayout")

        self.lane = QGroupBox(self.lane_edit_page,"lane")
        self.lane.setColumnLayout(0,Qt.Vertical)
        self.lane.layout().setSpacing(6)
        self.lane.layout().setMargin(11)
        laneLayout = QGridLayout(self.lane.layout())
        laneLayout.setAlignment(Qt.AlignTop)

        self.textLabel1_10 = QLabel(self.lane,"textLabel1_10")

        laneLayout.addWidget(self.textLabel1_10,0,0)

        self.lane_lane_position = QLineEdit(self.lane,"lane_lane_position")

        laneLayout.addWidget(self.lane_lane_position,1,1)

        self.textLabel1_2_7 = QLabel(self.lane,"textLabel1_2_7")
        self.textLabel1_2_7.setBackgroundOrigin(QLabel.WidgetOrigin)

        laneLayout.addWidget(self.textLabel1_2_7,1,0)

        self.lane_maximum_speed = QLineEdit(self.lane,"lane_maximum_speed")

        laneLayout.addWidget(self.lane_maximum_speed,2,1)

        self.textLabel1_3_7 = QLabel(self.lane,"textLabel1_3_7")

        laneLayout.addWidget(self.textLabel1_3_7,2,0)

        self.lane_deceleration_prob = QLineEdit(self.lane,"lane_deceleration_prob")

        laneLayout.addWidget(self.lane_deceleration_prob,3,1)

        self.textLabel1_4_7 = QLabel(self.lane,"textLabel1_4_7")
        self.textLabel1_4_7.setTextFormat(QLabel.RichText)

        laneLayout.addWidget(self.textLabel1_4_7,3,0)

        self.lane_lane_id = QLabel(self.lane,"lane_lane_id")
        self.lane_lane_id.setPaletteBackgroundColor(QColor(219,233,214))
        self.lane_lane_id.setBackgroundOrigin(QLabel.WidgetOrigin)
        self.lane_lane_id.setFrameShape(QLabel.Box)

        laneLayout.addWidget(self.lane_lane_id,0,1)

        self.textLabel1_7 = QLabel(self.lane,"textLabel1_7")
        self.textLabel1_7.setAlignment(QLabel.WordBreak | QLabel.AlignVCenter)

        laneLayout.addWidget(self.textLabel1_7,4,0)

        lane_edit_pageLayout.addWidget(self.lane,0,0)
        self.stack.addWidget(self.lane_edit_page,5)

        self.section_edit_page = QWidget(self.stack,"section_edit_page")
        section_edit_pageLayout = QGridLayout(self.section_edit_page,1,1,11,6,"section_edit_pageLayout")

        self.section = QGroupBox(self.section_edit_page,"section")
        self.section.setColumnLayout(0,Qt.Vertical)
        self.section.layout().setSpacing(6)
        self.section.layout().setMargin(11)
        sectionLayout = QGridLayout(self.section.layout())
        sectionLayout.setAlignment(Qt.AlignTop)

        self.section_is_preferencial = QCheckBox(self.section,"section_is_preferencial")

        sectionLayout.addMultiCellWidget(self.section_is_preferencial,4,4,0,1)

        self.textLabel1_4_8 = QLabel(self.section,"textLabel1_4_8")
        self.textLabel1_4_8.setTextFormat(QLabel.LogText)

        sectionLayout.addWidget(self.textLabel1_4_8,2,0)

        self.textLabel1_4_8_4 = QLabel(self.section,"textLabel1_4_8_4")
        self.textLabel1_4_8_4.setTextFormat(QLabel.LogText)

        sectionLayout.addWidget(self.textLabel1_4_8_4,3,0)

        self.section_delimiting_node_1 = QComboBox(0,self.section,"section_delimiting_node_1")

        sectionLayout.addWidget(self.section_delimiting_node_1,2,1)

        self.section_delimiting_node_2 = QComboBox(0,self.section,"section_delimiting_node_2")

        sectionLayout.addWidget(self.section_delimiting_node_2,3,1)

        self.textLabel1_2_8 = QLabel(self.section,"textLabel1_2_8")
        self.textLabel1_2_8.setBackgroundOrigin(QLabel.WidgetOrigin)

        sectionLayout.addWidget(self.textLabel1_2_8,0,0)

        self.textLabel1_11 = QLabel(self.section,"textLabel1_11")

        sectionLayout.addWidget(self.textLabel1_11,1,0)

        self.section_section_name = QLineEdit(self.section,"section_section_name")

        sectionLayout.addWidget(self.section_section_name,1,1)

        self.section_section_id = QLabel(self.section,"section_section_id")
        self.section_section_id.setPaletteBackgroundColor(QColor(219,233,214))
        self.section_section_id.setBackgroundOrigin(QLabel.WidgetOrigin)
        self.section_section_id.setFrameShape(QLabel.Box)

        sectionLayout.addWidget(self.section_section_id,0,1)

        self.create_laneset_btn = QPushButton(self.section,"create_laneset_btn")

        sectionLayout.addMultiCellWidget(self.create_laneset_btn,6,6,0,1)
        spacer54 = QSpacerItem(20,40,QSizePolicy.Minimum,QSizePolicy.Expanding)
        sectionLayout.addItem(spacer54,5,1)

        section_edit_pageLayout.addWidget(self.section,0,0)
        self.stack.addWidget(self.section_edit_page,6)

        self.tlight_edit_page = QWidget(self.stack,"tlight_edit_page")
        tlight_edit_pageLayout = QGridLayout(self.tlight_edit_page,1,1,11,6,"tlight_edit_pageLayout")

        self.tlight = QGroupBox(self.tlight_edit_page,"tlight")
        self.tlight.setColumnLayout(0,Qt.Vertical)
        self.tlight.layout().setSpacing(6)
        self.tlight.layout().setMargin(11)
        tlightLayout = QGridLayout(self.tlight.layout())
        tlightLayout.setAlignment(Qt.AlignTop)

        self.textLabel1_2_8_2 = QLabel(self.tlight,"textLabel1_2_8_2")
        self.textLabel1_2_8_2.setBackgroundOrigin(QLabel.WidgetOrigin)

        tlightLayout.addWidget(self.textLabel1_2_8_2,0,0)

        self.textLabel1_11_2 = QLabel(self.tlight,"textLabel1_11_2")

        tlightLayout.addWidget(self.textLabel1_11_2,1,0)

        self.trafficlight_traffic_light_id = QLabel(self.tlight,"trafficlight_traffic_light_id")
        self.trafficlight_traffic_light_id.setPaletteBackgroundColor(QColor(219,233,214))
        self.trafficlight_traffic_light_id.setBackgroundOrigin(QLabel.WidgetOrigin)
        self.trafficlight_traffic_light_id.setFrameShape(QLabel.Box)

        tlightLayout.addWidget(self.trafficlight_traffic_light_id,0,1)

        self.trafficlight_located_at_node = QComboBox(0,self.tlight,"trafficlight_located_at_node")
        self.trafficlight_located_at_node.setEnabled(0)

        tlightLayout.addWidget(self.trafficlight_located_at_node,1,1)

        tlight_edit_pageLayout.addWidget(self.tlight,0,0)
        self.stack.addWidget(self.tlight_edit_page,7)

        self.node_edit_page = QWidget(self.stack,"node_edit_page")
        node_edit_pageLayout = QGridLayout(self.node_edit_page,1,1,11,6,"node_edit_pageLayout")

        self.node = QGroupBox(self.node_edit_page,"node")
        self.node.setFlat(0)
        self.node.setChecked(0)
        self.node.setColumnLayout(0,Qt.Vertical)
        self.node.layout().setSpacing(6)
        self.node.layout().setMargin(11)
        nodeLayout = QGridLayout(self.node.layout())
        nodeLayout.setAlignment(Qt.AlignTop)

        self.node_x_coord = QLineEdit(self.node,"node_x_coord")

        nodeLayout.addWidget(self.node_x_coord,2,1)

        self.textLabel1_3_8_3 = QLabel(self.node,"textLabel1_3_8_3")

        nodeLayout.addWidget(self.textLabel1_3_8_3,2,0)

        self.node_y_coord = QLineEdit(self.node,"node_y_coord")

        nodeLayout.addWidget(self.node_y_coord,3,1)

        self.textLabel1_4_8_3 = QLabel(self.node,"textLabel1_4_8_3")
        self.textLabel1_4_8_3.setTextFormat(QLabel.LogText)

        nodeLayout.addWidget(self.textLabel1_4_8_3,3,0)

        self.textLabel1_11_3 = QLabel(self.node,"textLabel1_11_3")
        self.textLabel1_11_3.setEnabled(1)

        nodeLayout.addWidget(self.textLabel1_11_3,1,0)

        self.node_node_name = QLineEdit(self.node,"node_node_name")

        nodeLayout.addWidget(self.node_node_name,1,1)

        self.textLabel1_2_8_3 = QLabel(self.node,"textLabel1_2_8_3")
        self.textLabel1_2_8_3.setBackgroundOrigin(QLabel.WidgetOrigin)

        nodeLayout.addWidget(self.textLabel1_2_8_3,0,0)

        self.node_node_id = QLabel(self.node,"node_node_id")
        self.node_node_id.setPaletteBackgroundColor(QColor(219,233,214))
        self.node_node_id.setBackgroundOrigin(QLabel.WidgetOrigin)
        self.node_node_id.setFrameShape(QLabel.Box)

        nodeLayout.addWidget(self.node_node_id,0,1)
        spacer120 = QSpacerItem(20,51,QSizePolicy.Minimum,QSizePolicy.Expanding)
        nodeLayout.addItem(spacer120,4,1)
        spacer121 = QSpacerItem(20,71,QSizePolicy.Minimum,QSizePolicy.Expanding)
        nodeLayout.addItem(spacer121,7,1)

        self.create_node_btn1 = QPushButton(self.node,"create_node_btn1")

        nodeLayout.addMultiCellWidget(self.create_node_btn1,8,8,0,1)

        self.textLabel1_12 = QLabel(self.node,"textLabel1_12")
        self.textLabel1_12.setPaletteForegroundColor(QColor(255,0,0))
        self.textLabel1_12.setScaledContents(1)
        self.textLabel1_12.setAlignment(QLabel.WordBreak | QLabel.AlignVCenter)

        nodeLayout.addMultiCellWidget(self.textLabel1_12,6,6,0,1)

        self.pixmapLabel1 = QLabel(self.node,"pixmapLabel1")
        self.pixmapLabel1.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.pixmapLabel1.sizePolicy().hasHeightForWidth()))
        self.pixmapLabel1.setPixmap(self.image2)
        self.pixmapLabel1.setScaledContents(1)

        nodeLayout.addMultiCellWidget(self.pixmapLabel1,5,5,0,1)

        node_edit_pageLayout.addWidget(self.node,0,0)
        self.stack.addWidget(self.node_edit_page,8)

        self.empty_page = QWidget(self.stack,"empty_page")
        self.stack.addWidget(self.empty_page,9)

        self.network_edit_page = QWidget(self.stack,"network_edit_page")
        network_edit_pageLayout = QGridLayout(self.network_edit_page,1,1,11,6,"network_edit_pageLayout")

        self.network = QGroupBox(self.network_edit_page,"network")
        self.network.setColumnLayout(0,Qt.Vertical)
        self.network.layout().setSpacing(6)
        self.network.layout().setMargin(11)
        networkLayout = QGridLayout(self.network.layout())
        networkLayout.setAlignment(Qt.AlignTop)

        self.textLabel1_2_3_2 = QLabel(self.network,"textLabel1_2_3_2")
        self.textLabel1_2_3_2.setBackgroundOrigin(QLabel.WidgetOrigin)

        networkLayout.addWidget(self.textLabel1_2_3_2,0,0)

        self.textLabel1_2_4_2 = QLabel(self.network,"textLabel1_2_4_2")

        networkLayout.addWidget(self.textLabel1_2_4_2,1,0)

        self.network_network_name = QLineEdit(self.network,"network_network_name")

        networkLayout.addWidget(self.network_network_name,1,1)

        self.network_network_id = QLabel(self.network,"network_network_id")
        self.network_network_id.setPaletteBackgroundColor(QColor(219,233,214))
        self.network_network_id.setBackgroundOrigin(QLabel.WidgetOrigin)
        self.network_network_id.setFrameShape(QLabel.Box)

        networkLayout.addWidget(self.network_network_id,0,1)

        network_edit_pageLayout.addWidget(self.network,0,0)
        self.stack.addWidget(self.network_edit_page,10)

        self.street_creation_page = QWidget(self.stack,"street_creation_page")
        street_creation_pageLayout = QGridLayout(self.street_creation_page,1,1,11,6,"street_creation_pageLayout")

        self.street_creation = QGroupBox(self.street_creation_page,"street_creation")
        self.street_creation.setColumnLayout(0,Qt.Vertical)
        self.street_creation.layout().setSpacing(6)
        self.street_creation.layout().setMargin(11)
        street_creationLayout = QGridLayout(self.street_creation.layout())
        street_creationLayout.setAlignment(Qt.AlignTop)

        self.textLabel1_2 = QLabel(self.street_creation,"textLabel1_2")
        self.textLabel1_2.setScaledContents(0)
        self.textLabel1_2.setAlignment(QLabel.WordBreak | QLabel.AlignCenter)

        street_creationLayout.addMultiCellWidget(self.textLabel1_2,0,0,0,4)
        spacer1 = QSpacerItem(20,20,QSizePolicy.Minimum,QSizePolicy.Minimum)
        street_creationLayout.addItem(spacer1,1,3)

        self.textLabel2 = QLabel(self.street_creation,"textLabel2")

        street_creationLayout.addMultiCellWidget(self.textLabel2,2,2,2,3)

        self.textLabel1_3 = QLabel(self.street_creation,"textLabel1_3")
        self.textLabel1_3.setSizePolicy(QSizePolicy(QSizePolicy.Minimum,QSizePolicy.Minimum,0,0,self.textLabel1_3.sizePolicy().hasHeightForWidth()))

        street_creationLayout.addWidget(self.textLabel1_3,2,0)

        layout17 = QVBoxLayout(None,0,6,"layout17")
        spacer16 = QSpacerItem(22,40,QSizePolicy.Minimum,QSizePolicy.Minimum)
        layout17.addItem(spacer16)

        self.node_up = QToolButton(self.street_creation,"node_up")
        self.node_up.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.node_up.sizePolicy().hasHeightForWidth()))
        self.node_up.setIconSet(QIconSet(self.image3))
        layout17.addWidget(self.node_up)

        self.node_down = QToolButton(self.street_creation,"node_down")
        self.node_down.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.node_down.sizePolicy().hasHeightForWidth()))
        self.node_down.setIconSet(QIconSet(self.image4))
        layout17.addWidget(self.node_down)
        spacer17 = QSpacerItem(22,40,QSizePolicy.Minimum,QSizePolicy.Minimum)
        layout17.addItem(spacer17)

        street_creationLayout.addLayout(layout17,3,4)

        layout32 = QVBoxLayout(None,0,6,"layout32")
        spacer21 = QSpacerItem(20,40,QSizePolicy.Minimum,QSizePolicy.Minimum)
        layout32.addItem(spacer21)

        self.add_node_to_street_btn = QToolButton(self.street_creation,"add_node_to_street_btn")
        self.add_node_to_street_btn.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.add_node_to_street_btn.sizePolicy().hasHeightForWidth()))
        self.add_node_to_street_btn.setIconSet(QIconSet(self.image5))
        layout32.addWidget(self.add_node_to_street_btn)

        self.remove_node_from_street_btn = QToolButton(self.street_creation,"remove_node_from_street_btn")
        self.remove_node_from_street_btn.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.remove_node_from_street_btn.sizePolicy().hasHeightForWidth()))
        self.remove_node_from_street_btn.setIconSet(QIconSet(self.image6))
        layout32.addWidget(self.remove_node_from_street_btn)
        spacer22 = QSpacerItem(20,40,QSizePolicy.Minimum,QSizePolicy.Minimum)
        layout32.addItem(spacer22)

        street_creationLayout.addLayout(layout32,3,1)

        self.available_nodes = QListBox(self.street_creation,"available_nodes")
        self.available_nodes.setSizePolicy(QSizePolicy(QSizePolicy.Expanding,QSizePolicy.Preferred,0,0,self.available_nodes.sizePolicy().hasHeightForWidth()))
        self.available_nodes.setAcceptDrops(1)

        street_creationLayout.addWidget(self.available_nodes,3,0)

        self.selected_nodes = QListBox(self.street_creation,"selected_nodes")
        self.selected_nodes.setSizePolicy(QSizePolicy(QSizePolicy.Expanding,QSizePolicy.Preferred,0,0,self.selected_nodes.sizePolicy().hasHeightForWidth()))
        self.selected_nodes.setAcceptDrops(1)

        street_creationLayout.addMultiCellWidget(self.selected_nodes,3,3,2,3)
        spacer7 = QSpacerItem(20,20,QSizePolicy.Minimum,QSizePolicy.Maximum)
        street_creationLayout.addItem(spacer7,4,1)

        layout37 = QGridLayout(None,1,1,0,6,"layout37")

        layout21 = QHBoxLayout(None,0,6,"layout21")

        self.textLabel1_4 = QLabel(self.street_creation,"textLabel1_4")
        layout21.addWidget(self.textLabel1_4)

        self.lanes_max_speed = QLineEdit(self.street_creation,"lanes_max_speed")
        layout21.addWidget(self.lanes_max_speed)

        layout37.addMultiCellLayout(layout21,3,3,0,1)

        layout50 = QHBoxLayout(None,0,6,"layout50")

        self.textLabel5 = QLabel(self.street_creation,"textLabel5")
        layout50.addWidget(self.textLabel5)

        self.number_of_lanes = QSpinBox(self.street_creation,"number_of_lanes")
        self.number_of_lanes.setSizePolicy(QSizePolicy(QSizePolicy.Preferred,QSizePolicy.Fixed,0,0,self.number_of_lanes.sizePolicy().hasHeightForWidth()))
        self.number_of_lanes.setMaxValue(10)
        self.number_of_lanes.setMinValue(1)
        self.number_of_lanes.setValue(1)
        layout50.addWidget(self.number_of_lanes)

        layout37.addMultiCellLayout(layout50,2,2,0,1)

        layout6 = QHBoxLayout(None,0,6,"layout6")

        self.textLabel4 = QLabel(self.street_creation,"textLabel4")
        layout6.addWidget(self.textLabel4)

        self.button_group = QButtonGroup(self.street_creation,"button_group")
        self.button_group.setColumnLayout(0,Qt.Vertical)
        self.button_group.layout().setSpacing(6)
        self.button_group.layout().setMargin(11)
        button_groupLayout = QHBoxLayout(self.button_group.layout())
        button_groupLayout.setAlignment(Qt.AlignTop)

        self.one_way = QRadioButton(self.button_group,"one_way")
        self.one_way.setChecked(1)
        button_groupLayout.addWidget(self.one_way)

        self.two_way = QRadioButton(self.button_group,"two_way")
        button_groupLayout.addWidget(self.two_way)
        layout6.addWidget(self.button_group)

        layout37.addMultiCellLayout(layout6,1,1,0,1)

        self.street_name = QLineEdit(self.street_creation,"street_name")

        layout37.addWidget(self.street_name,0,1)

        self.textLabel3 = QLabel(self.street_creation,"textLabel3")

        layout37.addWidget(self.textLabel3,0,0)

        street_creationLayout.addMultiCellLayout(layout37,5,5,0,4)

        self.create_street = QPushButton(self.street_creation,"create_street")
        self.create_street.setSizePolicy(QSizePolicy(QSizePolicy.Preferred,QSizePolicy.Fixed,0,0,self.create_street.sizePolicy().hasHeightForWidth()))

        street_creationLayout.addMultiCellWidget(self.create_street,7,7,0,4)
        spacer24 = QSpacerItem(20,40,QSizePolicy.Minimum,QSizePolicy.Expanding)
        street_creationLayout.addMultiCell(spacer24,6,6,1,2)

        street_creation_pageLayout.addWidget(self.street_creation,0,0)
        self.stack.addWidget(self.street_creation_page,11)

        self.WStackPage = QWidget(self.stack,"WStackPage")
        WStackPageLayout = QGridLayout(self.WStackPage,1,1,11,6,"WStackPageLayout")

        self.node_creation = QGroupBox(self.WStackPage,"node_creation")
        self.node_creation.setColumnLayout(0,Qt.Vertical)
        self.node_creation.layout().setSpacing(6)
        self.node_creation.layout().setMargin(11)
        node_creationLayout = QGridLayout(self.node_creation.layout())
        node_creationLayout.setAlignment(Qt.AlignTop)

        self.create_node_btn2 = QPushButton(self.node_creation,"create_node_btn2")

        node_creationLayout.addWidget(self.create_node_btn2,1,0)
        spacer45 = QSpacerItem(20,40,QSizePolicy.Minimum,QSizePolicy.Expanding)
        node_creationLayout.addItem(spacer45,0,0)

        WStackPageLayout.addWidget(self.node_creation,0,0)
        self.stack.addWidget(self.WStackPage,12)

        self.WStackPage_2 = QWidget(self.stack,"WStackPage_2")
        WStackPageLayout_2 = QGridLayout(self.WStackPage_2,1,1,11,6,"WStackPageLayout_2")

        self.source_creation = QGroupBox(self.WStackPage_2,"source_creation")
        self.source_creation.setColumnLayout(0,Qt.Vertical)
        self.source_creation.layout().setSpacing(6)
        self.source_creation.layout().setMargin(11)
        source_creationLayout = QGridLayout(self.source_creation.layout())
        source_creationLayout.setAlignment(Qt.AlignTop)

        self.create_source_btn2 = QPushButton(self.source_creation,"create_source_btn2")

        source_creationLayout.addWidget(self.create_source_btn2,1,0)
        spacer45_2 = QSpacerItem(20,40,QSizePolicy.Minimum,QSizePolicy.Expanding)
        source_creationLayout.addItem(spacer45_2,0,0)

        WStackPageLayout_2.addWidget(self.source_creation,0,0)
        self.stack.addWidget(self.WStackPage_2,13)

        self.WStackPage_3 = QWidget(self.stack,"WStackPage_3")
        WStackPageLayout_3 = QGridLayout(self.WStackPage_3,1,1,11,6,"WStackPageLayout_3")

        self.sink_creation = QGroupBox(self.WStackPage_3,"sink_creation")
        self.sink_creation.setColumnLayout(0,Qt.Vertical)
        self.sink_creation.layout().setSpacing(6)
        self.sink_creation.layout().setMargin(11)
        sink_creationLayout = QGridLayout(self.sink_creation.layout())
        sink_creationLayout.setAlignment(Qt.AlignTop)

        self.create_sink_btn2 = QPushButton(self.sink_creation,"create_sink_btn2")

        sink_creationLayout.addWidget(self.create_sink_btn2,1,0)
        spacer45_2_2 = QSpacerItem(20,40,QSizePolicy.Minimum,QSizePolicy.Expanding)
        sink_creationLayout.addItem(spacer45_2_2,0,0)

        WStackPageLayout_3.addWidget(self.sink_creation,0,0)
        self.stack.addWidget(self.WStackPage_3,14)

        self.trafficlight_creation_page = QWidget(self.stack,"trafficlight_creation_page")
        trafficlight_creation_pageLayout = QGridLayout(self.trafficlight_creation_page,1,1,11,6,"trafficlight_creation_pageLayout")

        self.trafficlight_creation = QGroupBox(self.trafficlight_creation_page,"trafficlight_creation")
        self.trafficlight_creation.setColumnLayout(0,Qt.Vertical)
        self.trafficlight_creation.layout().setSpacing(6)
        self.trafficlight_creation.layout().setMargin(11)
        trafficlight_creationLayout = QGridLayout(self.trafficlight_creation.layout())
        trafficlight_creationLayout.setAlignment(Qt.AlignTop)

        self.create_tlight_btn = QPushButton(self.trafficlight_creation,"create_tlight_btn")

        trafficlight_creationLayout.addWidget(self.create_tlight_btn,2,0)
        spacer18 = QSpacerItem(20,460,QSizePolicy.Minimum,QSizePolicy.Expanding)
        trafficlight_creationLayout.addItem(spacer18,1,0)

        layout12 = QHBoxLayout(None,0,6,"layout12")

        self.textLabel1_11_2_2 = QLabel(self.trafficlight_creation,"textLabel1_11_2_2")
        layout12.addWidget(self.textLabel1_11_2_2)

        self.creation_trafficlight_located_at_node = QComboBox(0,self.trafficlight_creation,"creation_trafficlight_located_at_node")
        self.creation_trafficlight_located_at_node.setEnabled(1)
        layout12.addWidget(self.creation_trafficlight_located_at_node)

        trafficlight_creationLayout.addLayout(layout12,0,0)

        trafficlight_creation_pageLayout.addWidget(self.trafficlight_creation,0,0)
        self.stack.addWidget(self.trafficlight_creation_page,15)

        self.signalplan_edit = QWidget(self.stack,"signalplan_edit")
        signalplan_editLayout = QHBoxLayout(self.signalplan_edit,11,6,"signalplan_editLayout")

        self.signalplan_edit_2 = QGroupBox(self.signalplan_edit,"signalplan_edit_2")
        self.signalplan_edit_2.setColumnLayout(0,Qt.Vertical)
        self.signalplan_edit_2.layout().setSpacing(6)
        self.signalplan_edit_2.layout().setMargin(11)
        signalplan_editLayout_2 = QGridLayout(self.signalplan_edit_2.layout())
        signalplan_editLayout_2.setAlignment(Qt.AlignTop)

        self.signalplan_signalplan_id = QLabel(self.signalplan_edit_2,"signalplan_signalplan_id")
        self.signalplan_signalplan_id.setPaletteBackgroundColor(QColor(219,233,214))
        self.signalplan_signalplan_id.setBackgroundOrigin(QLabel.WidgetOrigin)
        self.signalplan_signalplan_id.setFrameShape(QLabel.Box)

        signalplan_editLayout_2.addWidget(self.signalplan_signalplan_id,0,1)

        self.textLabel1_2_3_2_2_2 = QLabel(self.signalplan_edit_2,"textLabel1_2_3_2_2_2")
        self.textLabel1_2_3_2_2_2.setBackgroundOrigin(QLabel.WidgetOrigin)

        signalplan_editLayout_2.addWidget(self.textLabel1_2_3_2_2_2,0,0)

        self.textLabel1_6 = QLabel(self.signalplan_edit_2,"textLabel1_6")

        signalplan_editLayout_2.addMultiCellWidget(self.textLabel1_6,1,1,0,1)

        layout23 = QVBoxLayout(None,0,6,"layout23")

        layout20 = QHBoxLayout(None,0,6,"layout20")

        layout19 = QHBoxLayout(None,0,6,"layout19")

        self.available_phases = QListBox(self.signalplan_edit_2,"available_phases")
        self.available_phases.setSizePolicy(QSizePolicy(QSizePolicy.Expanding,QSizePolicy.Preferred,0,0,self.available_phases.sizePolicy().hasHeightForWidth()))
        layout19.addWidget(self.available_phases)

        layout15 = QVBoxLayout(None,0,6,"layout15")

        self.add_phase_btn = QToolButton(self.signalplan_edit_2,"add_phase_btn")
        self.add_phase_btn.setIconSet(QIconSet())
        layout15.addWidget(self.add_phase_btn)

        self.delete_phase_btn = QToolButton(self.signalplan_edit_2,"delete_phase_btn")
        self.delete_phase_btn.setIconSet(QIconSet())
        layout15.addWidget(self.delete_phase_btn)
        layout19.addLayout(layout15)
        layout20.addLayout(layout19)
        spacer21_3 = QSpacerItem(40,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
        layout20.addItem(spacer21_3)

        layout17_2 = QVBoxLayout(None,0,6,"layout17_2")

        self.textLabel2_2 = QLabel(self.signalplan_edit_2,"textLabel2_2")
        layout17_2.addWidget(self.textLabel2_2)

        self.signalplan_phase_duration = QSpinBox(self.signalplan_edit_2,"signalplan_phase_duration")
        self.signalplan_phase_duration.setMaxValue(200)
        self.signalplan_phase_duration.setMinValue(1)
        layout17_2.addWidget(self.signalplan_phase_duration)
        layout20.addLayout(layout17_2)
        layout23.addLayout(layout20)

        layout22 = QVBoxLayout(None,0,6,"layout22")

        self.textLabel1_8 = QLabel(self.signalplan_edit_2,"textLabel1_8")
        layout22.addWidget(self.textLabel1_8)

        self.signalplan_additional_info = QLineEdit(self.signalplan_edit_2,"signalplan_additional_info")
        layout22.addWidget(self.signalplan_additional_info)
        layout23.addLayout(layout22)

        signalplan_editLayout_2.addMultiCellLayout(layout23,2,2,0,1)

        self.drawing_frame = my_canvasview(self.signalplan_edit_2,"drawing_frame")
        self.drawing_frame.setSizePolicy(QSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding,0,0,self.drawing_frame.sizePolicy().hasHeightForWidth()))

        signalplan_editLayout_2.addMultiCellWidget(self.drawing_frame,3,3,0,1)

        layout30 = QHBoxLayout(None,0,6,"layout30")

        layout21_2 = QVBoxLayout(None,0,6,"layout21_2")

        self.pushButton12 = QPushButton(self.signalplan_edit_2,"pushButton12")
        self.pushButton12.setSizePolicy(QSizePolicy(QSizePolicy.Preferred,QSizePolicy.Preferred,0,0,self.pushButton12.sizePolicy().hasHeightForWidth()))
        self.pushButton12.setPaletteBackgroundColor(QColor(100,150,125))
        layout21_2.addWidget(self.pushButton12)

        self.pushButton12_2 = QPushButton(self.signalplan_edit_2,"pushButton12_2")
        self.pushButton12_2.setSizePolicy(QSizePolicy(QSizePolicy.Preferred,QSizePolicy.Preferred,0,0,self.pushButton12_2.sizePolicy().hasHeightForWidth()))
        self.pushButton12_2.setPaletteBackgroundColor(QColor(80,115,110))
        layout21_2.addWidget(self.pushButton12_2)
        layout30.addLayout(layout21_2)

        self.textLabel2_2_2 = QLabel(self.signalplan_edit_2,"textLabel2_2_2")
        layout30.addWidget(self.textLabel2_2_2)

        self.pushButton12_3 = QPushButton(self.signalplan_edit_2,"pushButton12_3")
        self.pushButton12_3.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.pushButton12_3.sizePolicy().hasHeightForWidth()))
        self.pushButton12_3.setPaletteBackgroundColor(QColor(125,125,125))
        layout30.addWidget(self.pushButton12_3)

        self.textLabel2_2_2_2 = QLabel(self.signalplan_edit_2,"textLabel2_2_2_2")
        layout30.addWidget(self.textLabel2_2_2_2)

        signalplan_editLayout_2.addMultiCellLayout(layout30,4,4,0,1)
        signalplan_editLayout.addWidget(self.signalplan_edit_2)
        self.stack.addWidget(self.signalplan_edit,16)
        editorLayout.addWidget(self.stack)

        self.fileNewAction = QAction(self,"fileNewAction")
        self.fileNewAction.setIconSet(QIconSet(self.image8))
        self.fileOpenAction = QAction(self,"fileOpenAction")
        self.fileOpenAction.setIconSet(QIconSet(self.image9))
        self.fileSaveAction = QAction(self,"fileSaveAction")
        self.fileSaveAction.setIconSet(QIconSet(self.image10))
        self.fileSave_asAction = QAction(self,"fileSave_asAction")
        self.fileExitAction = QAction(self,"fileExitAction")
        self.helpAboutAction = QAction(self,"helpAboutAction")


        self.toolBar = QToolBar(QString(""),self,Qt.DockTop)

        self.fileNewAction.addTo(self.toolBar)
        self.fileOpenAction.addTo(self.toolBar)
        self.fileSaveAction.addTo(self.toolBar)


        self.MenuBar = QMenuBar(self,"MenuBar")


        self.File = QPopupMenu(self)
        self.fileNewAction.addTo(self.File)
        self.fileOpenAction.addTo(self.File)
        self.fileSaveAction.addTo(self.File)
        self.fileSave_asAction.addTo(self.File)
        self.File.insertSeparator()
        self.File.insertSeparator()
        self.fileExitAction.addTo(self.File)
        self.MenuBar.insertItem(QString(""),self.File,1)

        self.editMenu = QPopupMenu(self)
        self.editMenu.insertSeparator()
        self.editMenu.insertSeparator()
        self.MenuBar.insertItem(QString(""),self.editMenu,2)

        self.Help = QPopupMenu(self)
        self.Help.insertSeparator()
        self.helpAboutAction.addTo(self.Help)
        self.MenuBar.insertItem(QString(""),self.Help,3)


        self.languageChange()

        self.resize(QSize(916,832).expandedTo(self.minimumSizeHint()))
        self.clearWState(Qt.WState_Polished)

        self.connect(self.add_node_to_street_btn,SIGNAL("clicked()"),self.add_node_to_street)
        self.connect(self.add_phase_btn,SIGNAL("clicked()"),self.add_phase)
        self.connect(self.available_nodes,SIGNAL("doubleClicked(QListBoxItem*)"),self.add_node_to_street)
        self.connect(self.available_phases,SIGNAL("currentChanged(QListBoxItem*)"),self.paint_directions)
        self.connect(self.create_lane_btn,SIGNAL("clicked()"),self.add_lane_popup)
        self.connect(self.create_laneset_btn,SIGNAL("clicked()"),self.add_laneset_popup)
        self.connect(self.create_node_btn1,SIGNAL("clicked()"),self.add_node)
        self.connect(self.create_node_btn2,SIGNAL("clicked()"),self.add_node)
        self.connect(self.create_section_btn,SIGNAL("clicked()"),self.add_section_popup)
        self.connect(self.create_sink_btn1,SIGNAL("clicked()"),self.add_sink)
        self.connect(self.create_sink_btn2,SIGNAL("clicked()"),self.add_sink)
        self.connect(self.create_source_btn1,SIGNAL("clicked()"),self.add_source)
        self.connect(self.create_source_btn2,SIGNAL("clicked()"),self.add_source)
        self.connect(self.create_street,SIGNAL("clicked()"),self.add_street)
        self.connect(self.create_tlight_btn,SIGNAL("clicked()"),self.add_trafficlight)
        self.connect(self.delete_phase_btn,SIGNAL("clicked()"),self.delete_phase)
        self.connect(self.fileNewAction,SIGNAL("activated()"),self.fileNew)
        self.connect(self.fileOpenAction,SIGNAL("activated()"),self.fileOpen)
        self.connect(self.fileSaveAction,SIGNAL("activated()"),self.fileSave)
        self.connect(self.fileSave_asAction,SIGNAL("activated()"),self.fileSaveAs)
        self.connect(self.lane_deceleration_prob,SIGNAL("textChanged(const QString&)"),self.update_tree)
        self.connect(self.lane_lane_position,SIGNAL("textChanged(const QString&)"),self.update_tree)
        self.connect(self.lane_maximum_speed,SIGNAL("textChanged(const QString&)"),self.update_tree)
        self.connect(self.laneset_end_node,SIGNAL("activated(int)"),self.update_tree)
        self.connect(self.laneset_laneset_position,SIGNAL("textChanged(const QString&)"),self.update_tree)
        self.connect(self.laneset_start_node,SIGNAL("activated(int)"),self.update_tree)
        self.connect(self.laneset_turning_probabilities,SIGNAL("valueChanged(int,int)"),self.update_tree)
        self.connect(self.network_network_name,SIGNAL("textChanged(const QString&)"),self.update_tree)
        self.connect(self.node_down,SIGNAL("clicked()"),self.move_node_down)
        self.connect(self.node_node_name,SIGNAL("textChanged(const QString&)"),self.update_tree)
        self.connect(self.node_up,SIGNAL("clicked()"),self.move_node_up)
        self.connect(self.node_x_coord,SIGNAL("textChanged(const QString&)"),self.update_tree)
        self.connect(self.node_y_coord,SIGNAL("textChanged(const QString&)"),self.update_tree)
        self.connect(self.QT_tree,SIGNAL("selectionChanged()"),self.QT_tree_selection)
        self.connect(self.QT_tree,SIGNAL("rightButtonClicked(QListViewItem*,const QPoint&,int)"),self.fire_popup)
        self.connect(self.remove_node_from_street_btn,SIGNAL("clicked()"),self.remove_node_from_street)
        self.connect(self.section_delimiting_node_1,SIGNAL("activated(int)"),self.update_tree)
        self.connect(self.section_delimiting_node_2,SIGNAL("activated(int)"),self.update_tree)
        self.connect(self.section_is_preferencial,SIGNAL("stateChanged(int)"),self.update_tree)
        self.connect(self.section_section_name,SIGNAL("textChanged(const QString&)"),self.update_tree)
        self.connect(self.selected_nodes,SIGNAL("doubleClicked(QListBoxItem*)"),self.remove_node_from_street)
        self.connect(self.settings_cars_maximum_speed,SIGNAL("textChanged(const QString&)"),self.update_tree)
        self.connect(self.settings_cell_size_in_meters,SIGNAL("textChanged(const QString&)"),self.update_tree)
        self.connect(self.settings_iteration_length_in_seconds,SIGNAL("textChanged(const QString&)"),self.update_tree)
        self.connect(self.signalplan_phase_duration,SIGNAL("valueChanged(int)"),self.update_phases_duration)
        self.connect(self.sink_first_activation_at,SIGNAL("textChanged(const QString&)"),self.update_tree)
        self.connect(self.sink_located_at_node,SIGNAL("activated(int)"),self.update_tree)
        self.connect(self.sink_removal_probability,SIGNAL("textChanged(const QString&)"),self.update_tree)
        self.connect(self.sink_source_laneset,SIGNAL("activated(int)"),self.update_tree)
        self.connect(self.source_first_activation_at,SIGNAL("textChanged(const QString&)"),self.update_tree)
        self.connect(self.source_located_at_node,SIGNAL("activated(int)"),self.update_tree)
        self.connect(self.source_param,SIGNAL("textChanged(const QString&)"),self.update_tree)
        self.connect(self.source_source_activation_frequency,SIGNAL("textChanged(const QString&)"),self.update_tree)
        self.connect(self.source_target_laneset,SIGNAL("activated(int)"),self.update_tree)
        self.connect(self.stack,SIGNAL("aboutToShow(QWidget*)"),self.prepare_for_object_creation)
        self.connect(self.street_street_name,SIGNAL("textChanged(const QString&)"),self.update_tree)
        self.connect(self.helpAboutAction,SIGNAL("activated()"),self.helpAbout)
        self.connect(self.laneset_turning_probabilities,SIGNAL("valueChanged(int,int)"),self.update_tree)
        self.connect(self.source_source_variable,SIGNAL("valueChanged(int,int)"),self.update_tree)
        self.connect(self.source_source_type,SIGNAL("activated(int)"),self.update_tree)
        self.connect(self.add_source_rule_btn,SIGNAL("clicked()"),self.add_var_source_rule)
        self.connect(self.del_source_rule_btn,SIGNAL("clicked()"),self.delete_var_source_rule)
        self.connect(self.signalplan_additional_info,SIGNAL("textChanged(const QString&)"),self.update_signalplan_additional_info)

        self.setTabOrder(self.settings_iteration_length_in_seconds,self.QT_tree)
        self.setTabOrder(self.QT_tree,self.create_source_btn2)
        self.setTabOrder(self.create_source_btn2,self.create_sink_btn2)
        self.setTabOrder(self.create_sink_btn2,self.creation_trafficlight_located_at_node)
        self.setTabOrder(self.creation_trafficlight_located_at_node,self.create_tlight_btn)
        self.setTabOrder(self.create_tlight_btn,self.available_phases)
        self.setTabOrder(self.available_phases,self.signalplan_phase_duration)
        self.setTabOrder(self.signalplan_phase_duration,self.pushButton12)
        self.setTabOrder(self.pushButton12,self.pushButton12_2)
        self.setTabOrder(self.pushButton12_2,self.pushButton12_3)
        self.setTabOrder(self.pushButton12_3,self.source_first_activation_at)
        self.setTabOrder(self.source_first_activation_at,self.source_located_at_node)
        self.setTabOrder(self.source_located_at_node,self.source_target_laneset)
        self.setTabOrder(self.source_target_laneset,self.source_source_activation_frequency)
        self.setTabOrder(self.source_source_activation_frequency,self.source_source_type)
        self.setTabOrder(self.source_source_type,self.source_param)
        self.setTabOrder(self.source_param,self.source_source_variable)
        self.setTabOrder(self.source_source_variable,self.create_source_btn1)
        self.setTabOrder(self.create_source_btn1,self.sink_first_activation_at)
        self.setTabOrder(self.sink_first_activation_at,self.sink_removal_probability)
        self.setTabOrder(self.sink_removal_probability,self.sink_located_at_node)
        self.setTabOrder(self.sink_located_at_node,self.sink_source_laneset)
        self.setTabOrder(self.sink_source_laneset,self.create_sink_btn1)
        self.setTabOrder(self.create_sink_btn1,self.settings_cell_size_in_meters)
        self.setTabOrder(self.settings_cell_size_in_meters,self.settings_cars_maximum_speed)
        self.setTabOrder(self.settings_cars_maximum_speed,self.street_street_name)
        self.setTabOrder(self.street_street_name,self.laneset_laneset_position)
        self.setTabOrder(self.laneset_laneset_position,self.laneset_start_node)
        self.setTabOrder(self.laneset_start_node,self.laneset_end_node)
        self.setTabOrder(self.laneset_end_node,self.laneset_turning_probabilities)
        self.setTabOrder(self.laneset_turning_probabilities,self.lane_lane_position)
        self.setTabOrder(self.lane_lane_position,self.lane_maximum_speed)
        self.setTabOrder(self.lane_maximum_speed,self.lane_deceleration_prob)
        self.setTabOrder(self.lane_deceleration_prob,self.section_section_name)
        self.setTabOrder(self.section_section_name,self.section_delimiting_node_1)
        self.setTabOrder(self.section_delimiting_node_1,self.section_delimiting_node_2)
        self.setTabOrder(self.section_delimiting_node_2,self.section_is_preferencial)
        self.setTabOrder(self.section_is_preferencial,self.trafficlight_located_at_node)
        self.setTabOrder(self.trafficlight_located_at_node,self.node_node_name)
        self.setTabOrder(self.node_node_name,self.node_x_coord)
        self.setTabOrder(self.node_x_coord,self.node_y_coord)
        self.setTabOrder(self.node_y_coord,self.network_network_name)
        self.setTabOrder(self.network_network_name,self.available_nodes)
        self.setTabOrder(self.available_nodes,self.selected_nodes)
        self.setTabOrder(self.selected_nodes,self.street_name)
        self.setTabOrder(self.street_name,self.one_way)
        self.setTabOrder(self.one_way,self.number_of_lanes)
        self.setTabOrder(self.number_of_lanes,self.lanes_max_speed)
        self.setTabOrder(self.lanes_max_speed,self.create_street)
        self.setTabOrder(self.create_street,self.create_section_btn)
        self.setTabOrder(self.create_section_btn,self.create_laneset_btn)
        self.setTabOrder(self.create_laneset_btn,self.create_lane_btn)
        self.setTabOrder(self.create_lane_btn,self.create_node_btn1)
        self.setTabOrder(self.create_node_btn1,self.create_node_btn2)


    def languageChange(self):
        self.setCaption(self.__tr("ITSUMO network editor"))
        self.QT_tree.header().setLabel(0,QString.null)
        QToolTip.add(self.QT_tree,self.__tr("This is the network you're editing!"))
        self.source.setTitle(self.__tr("Source edit"))
        self.textLabel1_4_2.setText(self.__tr("Activate every (...) iterations"))
        self.textLabel1_3_2.setText(self.__tr("Target laneset"))
        self.textLabel1_4_2_2.setText(self.__tr("Type"))
        self.source_source_id.setText(QString.null)
        self.textLabel1_5_3.setText(self.__tr("ID"))
        self.textLabel1_2_2.setText(self.__tr("Node"))
        self.textLabel1_5.setText(self.__tr("First activation in iteration (...)"))
        self.param_caption.setText(self.__tr("Value"))
        self.create_source_btn1.setText(self.__tr("Create another source"))
        self.source_source_type.clear()
        self.source_source_type.insertItem(self.__tr("Constant Probability"))
        self.source_source_type.insertItem(self.__tr("Constant Flow"))
        self.source_source_type.insertItem(self.__tr("Variable Probability"))
        self.source_source_type.insertItem(self.__tr("Variable Flow"))
        self.source_source_variable.horizontalHeader().setLabel(0,self.__tr("Number of iterations"))
        self.source_source_variable.horizontalHeader().setLabel(1,self.__tr("Flow"))
        self.add_source_rule_btn.setText(QString.null)
        QToolTip.add(self.add_source_rule_btn,self.__tr("Add new rule to the variable source"))
        self.del_source_rule_btn.setText(QString.null)
        QToolTip.add(self.del_source_rule_btn,self.__tr("Remove a rule from the variable source"))
        self.sink.setTitle(self.__tr("Sink edit"))
        self.textLabel1_5_2.setText(self.__tr("ID"))
        self.textLabel1_5_2_2.setText(self.__tr("First activation in iteraction (...)"))
        self.textLabel1_3_2_2.setText(self.__tr("Source laneset"))
        self.textLabel1_2_2_2.setText(self.__tr("Node"))
        self.textLabel1_4_2_3.setText(self.__tr("Removal probability"))
        self.sink_sink_id.setText(QString.null)
        self.create_sink_btn1.setText(self.__tr("Create another sink"))
        self.settings.setTitle(self.__tr("Settings edit"))
        self.textLabel1_2_10.setText(self.__tr("Cell size (m)"))
        self.textLabel1_5_33.setText(self.__tr("Cars maximum speed"))
        self.textLabel1_4_3_2_2_2.setText(self.__tr("Iteration length (s)"))
        self.street.setTitle(self.__tr("Street edit"))
        self.textLabel1_2_5.setText(self.__tr("ID"))
        self.textLabel1_2_56.setText(self.__tr("Street name"))
        self.street_street_id.setText(QString.null)
        self.create_section_btn.setText(self.__tr("Create a section"))
        self.laneset.setTitle(self.__tr("Laneset edit"))
        self.textLabel1_2_6.setText(self.__tr("Position in the section (1=leftmost)"))
        self.textLabel1_3_6.setText(self.__tr("Start Node"))
        self.textLabel1_4_6.setText(self.__tr("End Node"))
        self.textLabel1_9.setText(self.__tr("ID"))
        self.laneset_laneset_id.setText(QString.null)
        self.create_lane_btn.setText(self.__tr("Create another lane"))
        self.textLabel1.setText(self.__tr("Turning Probabilities"))
        self.laneset_turning_probabilities.horizontalHeader().setLabel(0,self.__tr("Destination"))
        self.laneset_turning_probabilities.horizontalHeader().setLabel(1,self.__tr("Probability"))
        self.lane.setTitle(self.__tr("Lane edit"))
        self.textLabel1_10.setText(self.__tr("ID"))
        self.textLabel1_2_7.setText(self.__tr("Position in the laneset (1=leftmost)"))
        self.textLabel1_3_7.setText(self.__tr("Maximum speed"))
        self.textLabel1_4_7.setText(self.__tr("Deceleration probability"))
        self.lane_lane_id.setText(QString.null)
        self.textLabel1_7.setText(self.__tr("<font size=\"-1\"><p align=\"center\"></p><font color=\"#aa0000\">\n"
"(lane deceleration overrides the network default deceleration, if the lane decelaration value is different from zero (0))</font></font><"))
        self.section.setTitle(self.__tr("Section edit"))
        self.section_is_preferencial.setText(self.__tr("Preferencial"))
        self.textLabel1_4_8.setText(self.__tr("Delimiting node"))
        self.textLabel1_4_8_4.setText(self.__tr("Delimiting node"))
        self.textLabel1_2_8.setText(self.__tr("ID"))
        self.textLabel1_11.setText(self.__tr("Section name"))
        self.section_section_id.setText(QString.null)
        self.create_laneset_btn.setText(self.__tr("Create another laneset"))
        self.tlight.setTitle(self.__tr("Traffic light edit"))
        self.textLabel1_2_8_2.setText(self.__tr("Traffic light ID"))
        self.textLabel1_11_2.setText(self.__tr("Located at node"))
        self.trafficlight_traffic_light_id.setText(QString.null)
        self.node.setTitle(self.__tr("Node edit"))
        self.textLabel1_3_8_3.setText(self.__tr("X coordinate"))
        self.textLabel1_4_8_3.setText(self.__tr("Y coordinate"))
        self.textLabel1_11_3.setText(self.__tr("Node name"))
        self.textLabel1_2_8_3.setText(self.__tr("ID"))
        self.node_node_id.setText(QString.null)
        self.create_node_btn1.setText(self.__tr("Create another node"))
        self.textLabel1_12.setText(self.__tr("When assigning nodes coordinates, be advised that the\n"
"coordinate system used in Itsumo is as above."))
        self.network.setTitle(self.__tr("Network edit"))
        self.textLabel1_2_3_2.setText(self.__tr("Network ID"))
        self.textLabel1_2_4_2.setText(self.__tr("Network name"))
        self.network_network_id.setText(QString.null)
        self.street_creation.setTitle(self.__tr("Street creation"))
        self.textLabel1_2.setText(self.__tr("Please select which nodes are going to be part of the new street."))
        self.textLabel2.setText(self.__tr("Selected nodes"))
        self.textLabel1_3.setText(self.__tr("Available nodes"))
        self.node_up.setText(QString.null)
        self.node_down.setText(QString.null)
        self.add_node_to_street_btn.setText(QString.null)
        self.remove_node_from_street_btn.setText(QString.null)
        self.textLabel1_4.setText(self.__tr("Lanes maximum speed"))
        self.textLabel5.setText(self.__tr("Lanes in each direction"))
        self.textLabel4.setText(self.__tr("Orientation"))
        self.button_group.setTitle(QString.null)
        self.one_way.setText(self.__tr("one_way"))
        self.two_way.setText(self.__tr("two way"))
        self.textLabel3.setText(self.__tr("Street name"))
        self.create_street.setText(self.__tr("Create street"))
        self.node_creation.setTitle(self.__tr("Node creation"))
        self.create_node_btn2.setText(self.__tr("Create a node"))
        self.source_creation.setTitle(self.__tr("Source creation"))
        self.create_source_btn2.setText(self.__tr("Create a source"))
        self.sink_creation.setTitle(self.__tr("Sink creation"))
        self.create_sink_btn2.setText(self.__tr("Create a sink"))
        self.trafficlight_creation.setTitle(self.__tr("Traffic light creation"))
        self.create_tlight_btn.setText(self.__tr("Create traffic light"))
        self.textLabel1_11_2_2.setText(self.__tr("Located at node"))
        self.signalplan_edit_2.setTitle(self.__tr("Signal plan edit"))
        self.signalplan_signalplan_id.setText(QString.null)
        self.textLabel1_2_3_2_2_2.setText(self.__tr("Signalplan ID"))
        self.textLabel1_6.setText(self.__tr("Phases"))
        self.add_phase_btn.setText(self.__tr("Add phase"))
        self.delete_phase_btn.setText(self.__tr("Remove phase"))
        self.delete_phase_btn.setTextLabel(QString.null)
        self.textLabel2_2.setText(self.__tr("Selected phase duration"))
        self.textLabel1_8.setText(self.__tr("Additional signalplan information"))
        self.pushButton12.setText(QString.null)
        self.pushButton12_2.setText(QString.null)
        self.textLabel2_2_2.setText(self.__tr("Incoming lanes"))
        self.pushButton12_3.setText(QString.null)
        self.textLabel2_2_2_2.setText(self.__tr("Outgoing lanesets"))
        self.fileNewAction.setText(self.__tr("New"))
        self.fileNewAction.setMenuText(self.__tr("&New"))
        self.fileNewAction.setAccel(self.__tr("Ctrl+N"))
        self.fileOpenAction.setText(self.__tr("Open"))
        self.fileOpenAction.setMenuText(self.__tr("&Open..."))
        self.fileOpenAction.setAccel(self.__tr("Ctrl+O"))
        self.fileSaveAction.setText(self.__tr("Save"))
        self.fileSaveAction.setMenuText(self.__tr("&Save"))
        self.fileSaveAction.setAccel(self.__tr("Ctrl+S"))
        self.fileSave_asAction.setText(self.__tr("Save as"))
        self.fileSave_asAction.setMenuText(self.__tr("Save as"))
        self.fileExitAction.setText(self.__tr("Exit"))
        self.fileExitAction.setMenuText(self.__tr("Exit"))
        self.helpAboutAction.setText(self.__tr("About"))
        self.helpAboutAction.setMenuText(self.__tr("About"))
        self.toolBar.setLabel(self.__tr("Tools"))
        if self.MenuBar.findItem(1):
            self.MenuBar.findItem(1).setText(self.__tr("&File"))
        if self.MenuBar.findItem(2):
            self.MenuBar.findItem(2).setText(self.__tr("&Edit"))
        if self.MenuBar.findItem(3):
            self.MenuBar.findItem(3).setText(self.__tr("&Help"))


    def build_QT_tree(self,a0,a1):
        """Creates a QListView with the values of self.tree (the tree of network objects)"""
        
        form = a0
        topology_elements = a1
        
        def compare_signalplans_by_id(a, b):
            if a['signalplan_id'] < b['signalplan_id']:
                return -1
            else:
                return 1
            
        
        self.used_ids = []
        
        self.QT_tree.clear()
        self.QT_tree.setSorting( -1 )
        
        network_id = topology_elements.keys()[0]
        objects = topology_elements[network_id]
        
        self.used_ids.append(network_id)
        
        self.QT_tree.setColumnText(0, "Network %s" % objects['network_name'])
        
        # constructor for tree_item: tree_item(parent_item, name, all_objects, object_reference, object_type)
        network = tree_item(self.QT_tree, "network", objects, objects, 'network')
        tlights = tree_item(network, "traffic lights", None, None, 'traffic_lights')
        sinks = tree_item(network, "sinks", None, None, 'sinks')
        sources = tree_item(network, "sources", None, None, 'sources')
        streets = tree_item(network, "streets", None, None, 'streets')
        nodes = tree_item(network, "nodes", None, None, 'nodes')
        
        # TODO: conferir
        # settings = tree_item(self.QT_tree, "settings", objects, objects['settings'], 'settings')
        # self.QT_tree.setOpen(network, 1)
        # self.QT_tree.setCurrentItem(settings)
        
        for source_id, properties in objects['sources'].items():
        	node_name = objects['nodes'][properties['located_at_node']]['node_name']
        	new_source = tree_item(sources, "Located in node %s       (id %s)" % (node_name, source_id), objects, properties, 'source')
                self.used_ids.append(source_id)
        
        
        for sink_id, properties in objects['sinks'].items():
        	node_name = objects['nodes'][properties['located_at_node']]['node_name']
        	new_sink = tree_item(sinks, "Located in node %s       (id %s)" % (node_name, sink_id), objects, properties, 'sink')
                self.used_ids.append(sink_id)
        
        
        for node_id, properties in objects['nodes'].items():
        	new_node = tree_item(nodes, "Node %s       (id %s)" % (properties['node_name'], node_id), 
        			     objects, properties, 'node')
                self.used_ids.append(node_id)
        
        
        for tlight_id, tlight_properties in objects['traffic_lights'].items():
        	node_name = objects['nodes'][tlight_properties['located_at_node']]['node_name']
        	new_tlight = tree_item(tlights, "Located in node %s       (id %s)" % (node_name, tlight_id),
        			       objects, tlight_properties, 'tlight')
        	self.used_ids.append(tlight_id)
        
                
                signalplans = [i for i in tlight_properties['signalplans'].values()]
                signalplans.sort(compare_signalplans_by_id)
        	signalplans.reverse()
        
                for i in signalplans:
        		new_sp = tree_item(new_tlight,
        				   "Signalplan %s       (%s phases)" % (i['signalplan_id'], len(i['phases'])),
        				   objects, i, 'signalplan')
        
        
        for street_id, street_properties in objects['streets'].items():
        
        
        	new_street = tree_item(streets, "%s" % (street_properties['street_name']),
        			       objects, street_properties, 'street')
                self.used_ids.append(street_id)
        
        
        	for section_id, section_properties in street_properties['sections'].items():
        		new_section = tree_item(new_street, 
        					"Section %s       (id %s)" % (section_properties['section_name'],
        								   section_id),
        					objects, section_properties, 'section')
        		self.used_ids.append(section_id)
        
        
        
        		for laneset_id, laneset_properties in section_properties['lanesets'].items():
                                start_node_name = get_element_by_id(self.flat_tree,
        							     laneset_properties['start_node'])['node_name']
                                end_node_name = get_element_by_id(self.flat_tree,
        							  laneset_properties['end_node'])['node_name']
        
                                
        			laneset_caption = "Laneset (%s) -> (%s)       (id %s)" % (start_node_name,
        									     end_node_name, laneset_id)
        			new_laneset = tree_item(new_section, laneset_caption, objects,
        						laneset_properties, 'laneset')
        			self.used_ids.append(laneset_id)
        
        			
        			for lane_id, lane_properties in laneset_properties['lanes'].items():
        				new_lane = tree_item(new_laneset, "Lane %s" % (lane_id), objects, 
        						     lane_properties, 'lane')
        				self.used_ids.append(lane_id)
        
        self.used_ids.sort()
        
        sources.sortChildItems(0, 1)
        nodes.sortChildItems(0, 1)
        sinks.sortChildItems(0, 1)
        streets.sortChildItems(0, 1)
        tlights.sortChildItems(0, 1)
        
        				
        

    def fire_popup(self):
        """Fires a popup depending on which item was clicked"""
        from types import NoneType
        if type(self.QT_tree.selectedItem()) == NoneType:
        	return
        
        popup = getattr(self, self.QT_tree.selectedItem().object_type + "_popup")
        if popup != None:
        	popup.exec_loop(QCursor.pos())
        
        

    def fileNew(self):
        
        # reads the empty network from the xml and returns a tree
        (self.flat_tree, self.tree) = load_xml('empty.xml')
        self.current_file = 'empty.xml'
        
        # complements the tree with additional info (ie: the possible nodes for start/end of each laneset,
        # the possible target/source lanesets for each source, etc)
        self.tree = complement_tree(self.tree, self.flat_tree)
        
        # build the QT ListView using the tree
        self.build_QT_tree(self, self.tree)
        # updates the form caption
        self.setCaption(self.default_caption + "[" + self.current_file + "]")
                         
        

    def fileOpen(self):
        
        filename = qt.QFileDialog.getOpenFileName(".", "Topologies (*.xml)", self, "Open file dialog", "Choose a file" );                  
        
        
        if filename == None:
        	return
        
        if (qt.QFile.exists( filename)):
        
        	print "Opening", filename
        	# reads the network from the xml and returns a tree
        	(self.flat_tree, self.tree) = load_xml(filename)
        	self.current_file = str(filename)
        	
        	# complements the tree with additional info (ie: the possible nodes for start/end of each laneset,
        	# the possible target/source lanesets for each source, etc)
        	self.tree = complement_tree(self.tree, self.flat_tree)
        	
        	# build the QT ListView using the tree
        	self.build_QT_tree(self, self.tree)
        
        	# re-selects the network tab and guarantees it remains opened and expanded
        	self.QT_tree.setSelected(self.QT_tree.firstChild(), 1)
        	selected_item = self.QT_tree.selectedItem()
        	self.QT_tree.setOpen(selected_item, 1)
        	self.QT_tree.ensureItemVisible(selected_item)
        
        	# updates the form caption
        	self.setCaption(self.default_caption + "[" + self.current_file + "]")
        
        else:
        	qt.QMessageBox.critical(self,
        				"File does not exist", "File does not exist!",
        				qt.QMessageBox.Ok)
        	return
        
                          
        

    def fileSave(self):
        
        if self.current_file == 'empty.xml':
        	self.saving_dialog_open = 1
        	self.fileSaveAs()
        	self.saving_dialog_open = 0
        
        if self.current_file == 'empty.xml':
        	return
        
        dump_xml(self, self.current_file)
        
        # updates the form caption
        self.setCaption(self.default_caption + "[" + self.current_file + "]")
        
        print "Saving", self.current_file
        
                         
        

    def fileSaveAs(self):
        
        filename = qt.QFileDialog.getSaveFileName(".", "Topologies (*.xml)", self, "Save file dialog", "Choose a file" );                  
        
        if (qt.QFile.exists( filename)) and (qt.QMessageBox.question( self, "Save File",
        							      "%s already exists. Do you want to override it?" % filename,
        							      "&Yes", "&No") == 1 ):
        	return
        
        if filename == None:
        	return
        
        self.current_file = str(filename)
        # updates the form caption
        self.setCaption(self.default_caption + "[" + self.current_file + "]")
        
        if not self.saving_dialog_open:
        	self.fileSave()
        
        
        

    def fileExit(self):
        
        pass
        
        

    def helpAbout(self):
        
        qt.QMessageBox.critical(self, "About",
        			"ITSUMO network editor by Bruno (brunocs@gmail.com)\n" + \
        			"For more details of the project, please contact bazzan@inf.ufrgs.br",
        			qt.QMessageBox.Ok)
        
                          
        

    def QT_tree_selection(self):
        """When the user selects an item on the QT tree, this function
           puts the properties of the select item on the correct widgets"""
        
        # during this function, the tree SHOULD NOT be updated because the value of the widgets is not
        # yet filled! (trust me)
        self.do_not_update = 1
        
        from types import NoneType
        widgets = {'source': 0, 'sink': 1, 'settings': 2, 'street': 3, 'laneset': 4, 'lane': 5, 'section': 6,
                   'tlight': 7, 'node': 8, 'network': 10, 'streets': 11, 'nodes': 12, 'sources': 13, 'sinks': 14,
        	   'traffic_lights': 15, 'signalplan': 16}
        
        selected_item = self.QT_tree.selectedItem()
        
        # if the users clicks the "+" button to expand the list, the selected object is NoneType. If so, do nothing
        if type(selected_item) == NoneType:
        	return
        
        # raise the frame containing the properties for the specified object 
        # ('lane edit' frame, 'section edit' frame, etc)
        self.stack.raiseWidget(widgets[str(selected_item.object_type)])
        
        if selected_item.object_type == 'signalplan':
        
            # since the signal plan requires a complex routine to show its attributes
            # (eg: drawing the plans, directions, etc), we'll use a different function
            parent_trafficlight = self.QT_tree.selectedItem().parent().object_reference
            drawing_frame = self.stack.visibleWidget().child("drawing_frame")
            
            fill_signalplan(self.stack.visibleWidget(), self.tree, self.flat_tree,
                            parent_trafficlight, selected_item.object_reference, drawing_frame)
        
        
        elif selected_item.object_type == 'source':
            fill_source(self, self.stack.visibleWidget().child('source'),
                        selected_item.object_reference)
        
        else:
        
            # all other objects are more or less the same, so we can use these generic
            # calls for filling automatically the widgets, giving the name of the attribute
            if selected_item.object_type not in ('streets', 'nodes', 'sources', 'sinks', 'traffic_lights'):
                for widget in self.stack.visibleWidget().child(selected_item.object_type).children():
                    widget_name = widget.name()[widget.name().find('_')+1:]
                    if selected_item.object_reference.has_key(widget_name):
                        fill_widget(self, widget, 
                                    selected_item.object_reference[widget_name], 
                                    selected_item.object_reference)
        
        # ok, now the tree can be updated if there is any change in the value of a widget
        self.do_not_update = 0
        
        

    def print_error_and_rollback(self,a0,a1):
        """If an error was found, print some message and rollback to a valid state"""
        error_message = a0
        valid_tree = a1
        
        qt.QMessageBox.critical(self,
                                "Inconsistent topology", error_message,
                                qt.QMessageBox.Ok)
        # rollsback in case update_tree_and_QT_tree failed
        # print "rolling back!"
        
        # returns to the previous state of the tree and restores the original object_reference of the widget
        self.tree = copy.deepcopy(valid_tree)
        # selected_item.object_reference = object_copy
        
        # re-selects the widget and re-fills the widgets with the original values
        self.QT_tree_selection()
        
        

    def update_tree(self):
        """This function is called when it is necessary to update the tree of objects
           to reflect an update in the value of some widget"""
        
        if self.do_not_update:
            return
        
        selected_item = self.QT_tree.selectedItem()
        
        object_ref = selected_item.object_reference
        object_type = selected_item.object_type
        
        # makes a copy of the tree, in case the upcoming updates fail!
        valid_tree = copy.deepcopy(self.tree)
        
        widget_name = self.sender().name()[self.sender().name().find('_')+1:]
        if object_ref.has_key(widget_name) or widget_name == "source_variable":
            print "updating --", widget_name
            (error, error_message) = update_tree_from_widget(self.sender(), widget_name, object_ref, self.tree)
            if error == 1:
                self.print_error_and_rollback(error_message, valid_tree)
                return
        
        
        self.update_tree_and_QT_tree({'object_reference': object_ref,
                                      'object_type': object_type})
        
            
        

    def add_lane_popup(self):
        """function that will be called by the popup menus. All it
        does is to call 'add_lane' with a lot of None parameters"""
        
        self.add_lane(None, None)
        

    def add_lane(self,a0,a1):
        """Adds a lane"""
        parent_laneset = a0
        lanes_max_speed = a1
        
        must_update = 0
        
        if parent_laneset == None:
        	must_update = 1
        	parent_laneset = self.QT_tree.selectedItem().object_reference
        
        max_used_position = 0
        max_speed_for_other_lanes = -1
        for other_lane in parent_laneset['lanes'].values():
            if other_lane['lane_position'] > max_used_position:
                max_used_position = int(other_lane['lane_position'])
                max_speed_for_other_lanes = int(other_lane['maximum_speed'])
        
        if lanes_max_speed == None:
        	network_id = self.tree.keys()[0]
        	objects = self.tree[network_id]
        
        	# TODO: deixar de alguma maneira mais decente
        	lanes_max_speed = 3
        	    
        # 	lanes_max_speed = objects['settings']['cars_maximum_speed']
        	if max_speed_for_other_lanes != -1:
        		lanes_max_speed = max_speed_for_other_lanes
                
                
        new_id = self.get_free_id()
        
        new_lane = {'lane_id': new_id, 'maximum_speed': lanes_max_speed, 'deceleration_prob': 0,
                            'lane_position': max_used_position+1}
        
        parent_laneset['lanes'][new_id] = new_lane
        self.flat_tree[new_id] = new_lane
        
        if must_update:
        	self.update_tree_and_QT_tree({'object_reference': new_lane, 'object_type': 'lane'})
        

    def add_laneset_popup(self):
        """function that will be called by the popup menus. All it
        does is to call 'add_laneset' with a lot of None parameters"""
        
        self.add_laneset(None, None, None, None, None)
        

    def add_laneset(self,a0,a1,a2,a3,a4):
        """Adds a laneset"""
        parent_section = a0
        start = a1
        end = a2
        nlanes = a3
        lanes_max_speed = a4
        
        must_update = 0
        
        if parent_section == None:
        	must_update = 1
        	parent_section = self.QT_tree.selectedItem().object_reference
        if start == None:
        	start = -1
        if end == None:
        	end = -1
        if nlanes == None:
            nlanes = 1
        
        max_used_position = 0
        for other_laneset in parent_section['lanesets'].values():
            if other_laneset['laneset_position'] > max_used_position:
                max_used_position = int(other_laneset['laneset_position'])
                
        new_id = self.get_free_id()
        
        new_laneset = {'laneset_id': new_id, 'laneset_position': max_used_position+1, 'lanes': {},
        	       'turning_probabilities': {}, 'start_node': start, 'end_node': end, '__possible_nodes': [] }
        
        for i in range(nlanes):
        	self.add_lane(new_laneset, lanes_max_speed)
        
        parent_section['lanesets'][new_id] = new_laneset
        self.flat_tree[new_id] = new_laneset
        
        if must_update:
        	self.update_tree_and_QT_tree({'object_reference': new_laneset, 'object_type': 'laneset'})
        
        
        

    def add_section_popup(self):
        """function that will be called by the popup menus. All it
        does is to call 'add_section' with a lot of None parameters"""
        
        self.add_section(None, None, None, None, None, None)
        

    def add_section(self,a0,a1,a2,a3,a4,a5):
        """Adds a section"""
        parent_street = a0
        n1 = a1
        n2 = a2
        nways = a3
        nlanes = a4
        lanes_max_speed = a5
        
        must_update = 0
        
        if parent_street == None:
        	must_update = 1
        	parent_street = self.QT_tree.selectedItem().object_reference
        if nways == None:
        	nways = 'one_way'
        if nlanes == None:
        	nlanes = 1
        if n1 == None:
        	n1 = -1
        if n2 == None:
        	n2 = -1
        
        
        new_id = self.get_free_id()
        
        new_section = {'section_id': new_id, 'section_name': '', 'lanesets': {}, 'is_preferencial': 'false',
                       'delimiting_node_1': n1, 'delimiting_node_2': n2}
        
        if nways == 'one_way':
        	self.add_laneset(new_section, n1, n2, nlanes, lanes_max_speed)
        else:
        	self.add_laneset(new_section, n1, n2, nlanes, lanes_max_speed)
        	self.add_laneset(new_section, n2, n1, nlanes, lanes_max_speed)
        
        parent_street['sections'][new_id] = new_section
        self.flat_tree[new_id] = new_section
        
        if must_update:
        	self.update_tree_and_QT_tree({'object_reference': new_section, 'object_type': 'section'})
        
        

    def add_var_source_rule(self):
        
        source_var_table = self.sender().parent().child('source_source_variable')
        cur_row = source_var_table.currentRow()
        
        if cur_row == -1:
        	cur_row = int(source_var_table.numRows())
        
        source_var_table.insertRows(cur_row)
        source_var_table.setText(cur_row, 0, str("1"))
        source_var_table.setText(cur_row, 1, str("1"))
        source_var_table.selectRow(cur_row)
        
        update_tree_from_widget(source_var_table, 'source_variable',
        			self.QT_tree.selectedItem().object_reference, self.tree)
        
        

    def delete_var_source_rule(self):
        
        source_var_table = self.sender().parent().child('source_source_variable')
        cur_row = source_var_table.currentRow()
        
        if cur_row == -1:
        	return
        
        source_var_table.removeRow(cur_row)
        
        update_tree_from_widget(source_var_table, 'source_variable',
        			self.QT_tree.selectedItem().object_reference, self.tree)
        
        

    def add_street(self):
        """Adds a street"""
        
        parent_item = self.QT_tree.selectedItem()
        
        network_id = self.tree.keys()[0]
        parent_network = self.tree[network_id]
        
        selected_nodes = self.stack.child("selected_nodes")
        
        if selected_nodes.count() < 2:
        	qt.QMessageBox.critical(self,
        				"Insuficient number of nodes!",
        				"The street must have at least two nodes!",
        				qt.QMessageBox.Ok)
        	return
        
        
        new_id = self.get_free_id()
        
        suggested_name = str(self.stack.child("street_name").text())
        if suggested_name.strip() == "":
        	suggested_name = 'street %s' % (new_id)
        	
        number_of_ways = self.stack.child("button_group").selected().name()
        number_of_lanes = self.stack.child("number_of_lanes").value()
        lanes_max_speed = int(str(self.stack.child("lanes_max_speed").text()))
        
        # TODO:       forcar pelo menos 1 source e os sinks minimos
        # TODO:       garantir sections/lanesets com nodos distintos
        
        new_street = {'street_id': new_id, 'street_name': suggested_name, 'sections': {}}
        
        for i in range(selected_nodes.count()):
        	if i == selected_nodes.count() - 1:
        		break
        	self.add_section(new_street, widget_text_to_node_id(selected_nodes.item(i).text()),
        			 widget_text_to_node_id(selected_nodes.item(i+1).text()),
        			 number_of_ways, number_of_lanes, lanes_max_speed)
        
        
        parent_network['streets'][new_id] = new_street
        self.flat_tree[new_id] = new_street
                      
        # selects the parent item on the QT tree and makes sure the tree remains expanded
        self.QT_tree.setSelected(parent_item, 1)
        selected_item = self.QT_tree.selectedItem()
        self.QT_tree.setOpen(selected_item, 1)
        self.QT_tree.ensureItemVisible(selected_item)
        
        
        self.update_tree_and_QT_tree({})
        
        

    def prepare_for_trafficlight_creation(self,a0):
        """fills the widgets in the trafficlight creation window with the default values:
        a list of all nodes in the listbox of available nodes and a suggestion of ID"""
        widget = a0
        
        network_id = self.tree.keys()[0]
        objects = self.tree[network_id]
        
        (possible_nodes_ids, possible_nodes_verbose) = possible_nodes_for_trafficlights(self.tree)
        
        located_at_node = widget.child("creation_trafficlight_located_at_node")
        located_at_node.clear()
        located_at_node.insertStrList(possible_nodes_verbose)
        
        # # ok, let's suggest an id
        # new_id = self.get_free_id()
        # # the name is based on the next available id, but we don't want to mark it as used yet
        # self.used_ids.remove(new_id)
        # widget.child("trafficlight_id").setText("%s" % (new_id))
        

    def prepare_for_object_creation(self,a0):
        widget = a0
        
        if widget.name() == 'street_creation_page':
        	self.prepare_for_street_creation(widget)
        elif widget.name() == 'trafficlight_creation_page':
        	self.prepare_for_trafficlight_creation(widget)
        					 
        

    def add_trafficlight(self):
        
        parent_item = self.QT_tree.selectedItem()
        
        network_id = self.tree.keys()[0]
        parent_network = self.tree[network_id]
        
        
        # all_nodes = [n for n in parent_network['nodes'].keys()]
        # located_at_node = all_nodes[0]
        # print "-->", self.stack.child("creation_trafficlight_located_at_node").currentText()
        located_at_node = widget_text_to_node_id(self.stack.child("creation_trafficlight_located_at_node").currentText())
        
        tlight_id = self.get_free_id()
        
        # new_tlight = {'traffic_light_id': tlight_id, 'located_at_node': located_at_node, 'signalplans': {}}
        # new_tlight['signalplans'] = {1: {'phases': {}, 'signalplan_id': 1}}
        # new_tlight['signalplans'][1]['phases'] = {0: {'directions': [[]], 'iteration_end': 0, 'iteration_start': 0, 'phase_id': 0}}
        
        new_tlight = {'traffic_light_id': tlight_id, 'located_at_node': located_at_node}
        new_tlight['signalplans'] =  {1: {'phases': {1: {'directions': [],
        						 'iteration_end': 29,
        						 'iteration_start': 0,
        						 'phase_id': 1} },
        				  'additional_info': '', 
        				  'signalplan_id': 1}
        }
        
        
        # pretty_printer.pprint(new_tlight)
        
        parent_network['traffic_lights'][tlight_id] = new_tlight
        self.flat_tree[tlight_id] = new_tlight
        
        # selects the parent item on the QT tree and makes sure the tree remains expanded
        self.QT_tree.setSelected(parent_item, 1)
        selected_item = self.QT_tree.selectedItem()
        self.QT_tree.setOpen(selected_item, 1)
        self.QT_tree.ensureItemVisible(selected_item)
        
        
        
        self.update_tree_and_QT_tree({})
        
        
        

    def add_signalplan(self):
        
        # print "adicionando novo signalplan!"
        
        parent_item = self.QT_tree.selectedItem()
        parent_tlight = self.QT_tree.selectedItem().object_reference
        
        used_ids = parent_tlight['signalplans'].keys()
        used_ids.sort()
        
        new_id = used_ids[-1] + 1
        
        signalplans = parent_tlight['signalplans']
        
        new_phase_id = -1
        for sp in signalplans.values():
                phases = sp['phases'].values()
                for ph in phases:
                        if ph['phase_id'] > new_phase_id:
                                new_phase_id = ph['phase_id']
        
        
        new_phase_id += 1
        
        
        # print "used ids=", used_ids
        
        # print "vai botar no tlight", parent_tlight
        # print "--> vai criar com id=", new_id
        
        parent_tlight['signalplans'][new_id] = {'phases': {new_phase_id: {'directions': [],
        						       'iteration_end': 0,
        						       'iteration_start': 0,
        						       'phase_id': new_phase_id} },
        					'additional_info': '', 
        					'signalplan_id': new_id}
        
        
        # selects the parent item on the QT tree and makes sure the tree remains expanded
        self.QT_tree.setSelected(parent_item, 1)
        selected_item = self.QT_tree.selectedItem()
        self.QT_tree.setOpen(selected_item, 1)
        self.QT_tree.ensureItemVisible(selected_item)
        
        self.update_tree_and_QT_tree({})
        
        
        

    def delete_signalplan(self):
        
        # print "removendo signalplan!"
        
        parent_item = self.QT_tree.selectedItem()
        selected_signalplan = self.QT_tree.selectedItem().object_reference
        signalplan_id = selected_signalplan['signalplan_id']
        
        # print "--> vai apagar a id=", signalplan_id
        
        parent_tlight = self.QT_tree.selectedItem().parent().object_reference
        
        if len(parent_tlight['signalplans']) < 2:
        	qt.QMessageBox.critical(self, "Error",
        				"The trafficlight must have at least one signalplan!",
        				qt.QMessageBox.Ok)
        else:
        	del(parent_tlight['signalplans'][signalplan_id])
        
        	# selects the parent item on the QT tree and makes sure the tree remains expanded
        	self.QT_tree.setSelected(parent_item, 1)
        	selected_item = self.QT_tree.selectedItem()
        	self.QT_tree.setOpen(selected_item, 1)
        	self.QT_tree.ensureItemVisible(selected_item)
        
        	self.update_tree_and_QT_tree({})
        
        
        

    def update_signalplan_additional_info(self):
        
        selected_signalplan = self.QT_tree.selectedItem().object_reference
        additional_info_widget = self.stack.visibleWidget().child("signalplan_additional_info")
        
        selected_signalplan['additional_info'] = str(additional_info_widget.text())
        
        

    def delete_trafficlight(self):
        """Deletes a traffic light"""
        
        selected_tlight = self.QT_tree.selectedItem().object_reference
        tlight_id = selected_tlight['traffic_light_id']
        parent_item = self.QT_tree.selectedItem().parent()
        
        network_id = self.tree.keys()[0]
        objects = self.tree[network_id]
        
        del objects['traffic_lights'][tlight_id]
        del self.flat_tree[tlight_id]
        
        # selects the parent item on the QT tree and makes sure the tree remains expanded
        self.QT_tree.setSelected(parent_item, 1)
        selected_item = self.QT_tree.selectedItem()
        self.QT_tree.setOpen(selected_item, 1)
        self.QT_tree.ensureItemVisible(selected_item)
        
        
        self.update_tree_and_QT_tree({})
        
        
        

    def prepare_for_street_creation(self,a0):
        """fills the widgets in the street creation window with the default values:
        a list of all nodes in the listbox of available nodes, a suggestion for street name and
        the default values for direction and number of lanes"""
        widget = a0
        
        available_nodes = widget.child("available_nodes")
        selected_nodes = widget.child("selected_nodes")
        	
        
        network_id = self.tree.keys()[0]
        objects = self.tree[network_id]
        
        all_nodes = [node_data_to_widget_text(n) for n in objects['nodes'].values()]
        
        # prepares the listboxes of available and selected nodes
        available_nodes.clear()
        selected_nodes.clear()
        
        available_nodes.insertStrList(all_nodes)
        available_nodes.sort()
        
        # ok, let's suggest a name too
        new_id = self.get_free_id()
        # the name is based on the next available id, but we don't want to mark it as used yet
        self.used_ids.remove(new_id)
        widget.child("street_name").setText("street %s" % (new_id))
        
        # default direction = one way
        widget.child("one_way").setChecked(1)
        
        # default number of lanes = 1
        widget.child("number_of_lanes").setValue(1)
        
        network_id = self.tree.keys()[0]
        objects = self.tree[network_id]
        
        # default_speed = objects['settings']['cars_maximum_speed']
        # TODO: maneira mais decente
        default_speed = 3
        
        # default speed for the lanes
        widget.child("lanes_max_speed").setText(str(default_speed))
        
        
        

    def add_node_to_street(self):
        """when the user clicks the add-arrow in the street creation
        widget, this function is called in order to move the selected
        item from the list of available nodes to the list of selected nodes"""
        
        available_nodes = self.stack.child("available_nodes")
        selected_nodes = self.stack.child("selected_nodes")
        
        # is there anything selected?
        if available_nodes.currentItem() != -1:
        	selected_nodes.insertItem(available_nodes.currentText())
        	available_nodes.removeItem(available_nodes.currentItem())
        
        

    def remove_node_from_street(self):
        """when the user clicks the remove-arrow in the street creation
        widget, this function is called in order to move the selected
        item from the list of selected nodes to the list of available nodes"""
        
        available_nodes = self.stack.child("available_nodes")
        selected_nodes = self.stack.child("selected_nodes")
        
        # is there anything selected?
        if selected_nodes.currentItem() != -1:
        	available_nodes.insertItem(selected_nodes.currentText())
        	selected_nodes.removeItem(selected_nodes.currentItem())
        
        	available_nodes.sort()
        
        

    def move_node_up(self):
        """changes the order of the selected nodes for a given
        street, in the street creation widget"""
        
        selected_nodes = self.stack.child("selected_nodes")
        
        current = selected_nodes.currentItem()
        if current == 0:
        	return
        
        temp = selected_nodes.text(current - 1)
        selected_nodes.changeItem(selected_nodes.text(current), current - 1)
        selected_nodes.changeItem(temp, current)
        selected_nodes.setSelected(current - 1, 1)
        
        
        

    def move_node_down(self):
        """changes the order of the selected nodes for a given
        street, in the street creation widget"""
        
        selected_nodes = self.stack.child("selected_nodes")
        
        current = selected_nodes.currentItem()
        if current == selected_nodes.count() - 1:
        	return
        
        temp = selected_nodes.text(current);
        selected_nodes.changeItem(selected_nodes.text(current + 1), current)
        selected_nodes.changeItem(temp, current + 1)
        selected_nodes.setSelected(current + 1, 1)
        
        
        

    def add_source(self):
        """Adds a source"""
        
        network_id = self.tree.keys()[0]
        parent_network = self.tree[network_id]
        
        # chooses the first available node for the initial value of 'located_at_node'
        for street_properties in parent_network['streets'].values():
        	for section_properties in street_properties['sections'].values():
        		for laneset_properties in section_properties['lanesets'].values():
        			located_at_node = laneset_properties['start_node']
        			break
        		
        new_id = self.get_free_id()
        new_source = {'source_id': new_id, 'first_activation_at': 0, 'located_at_node': located_at_node,
                      'target_laneset': -1, 'source_activation_frequency': 1,
                      'source_type': 'CONSTANT_FLOW', 'param': 1}
        
        parent_network['sources'][new_id] = new_source
        self.flat_tree[new_id] = new_source
        
        self.update_tree_and_QT_tree({'object_reference': new_source, 'object_type': 'source'})
        
        

    def add_sink(self):
        """Adds a sink"""
        
        network_id = self.tree.keys()[0]
        parent_network = self.tree[network_id]
        
        # chooses the first available node for the starting value of 'located_at_node' (could be any node)
        # chooses the first available node for the initial value of 'located_at_node'
        for street_properties in parent_network['streets'].values():
        	for section_properties in street_properties['sections'].values():
        		for laneset_properties in section_properties['lanesets'].values():
        			located_at_node = laneset_properties['end_node']
        			break
        
        new_id = self.get_free_id()
        new_sink = {'sink_id': new_id, 'first_activation_at': 0, 'located_at_node': located_at_node,
                    'source_laneset': -1, 'removal_probability': 1.0 }
        
        parent_network['sinks'][new_id] = new_sink
        self.flat_tree[new_id] = new_sink
                      
        self.update_tree_and_QT_tree({'object_reference': new_sink, 'object_type': 'sink'})
        
        

    def add_node(self):
        """Adds a node"""
        
        network_id = self.tree.keys()[0]
        parent_network = self.tree[network_id]
        
        new_id = self.get_free_id()
        new_node = {'node_id': new_id, 'node_name': 'n%s' % (new_id), 'x_coord': 0, 'y_coord': 0 }
        
        parent_network['nodes'][new_id] = new_node
        self.flat_tree[new_id] = new_node
        
        self.update_tree_and_QT_tree({'object_reference': new_node, 'object_type': 'node'})
        
        

    def delete_lane(self):
        """Deletes a lane"""
        
        selected_lane = self.QT_tree.selectedItem().object_reference
        lane_id = selected_lane['lane_id']
        
        parent_laneset = self.QT_tree.selectedItem().parent().object_reference
        
        
        if len(parent_laneset['lanes'].keys()) < 2:
        	qt.QMessageBox.critical(self,
        				"Insuficient number of lanes!",
        				"The laneset must have at one lane!",
        				qt.QMessageBox.Ok)
        	return
        
        
        del parent_laneset['lanes'][lane_id]
        del self.flat_tree[lane_id]
        
        self.update_tree_and_QT_tree({'object_reference': parent_laneset, 'object_type': 'laneset'})
        
        

    def delete_laneset(self):
        """Deletes a laneset"""
        
        selected_laneset = self.QT_tree.selectedItem().object_reference
        laneset_id = selected_laneset['laneset_id']
        
        parent_section = self.QT_tree.selectedItem().parent().object_reference
        
        
        if len(parent_section['lanesets'].keys()) < 2:
        	qt.QMessageBox.critical(self,
        				"Insuficient number of lanesets!",
        				"The section must have at one laneset!",
        				qt.QMessageBox.Ok)
        	return
        
        
        (error, error_message) = can_delete_laneset(selected_laneset, self.tree)
        if error == 1:
        	qt.QMessageBox.critical(self, "Laneset in use!", error_message, qt.QMessageBox.Ok)
        	return
        
        # deletes all lanes too
        for i in selected_laneset['lanes'].keys():
        	del self.flat_tree[i]
        
        del parent_section['lanesets'][laneset_id]
        del self.flat_tree[laneset_id]
        
        self.update_tree_and_QT_tree({'object_reference': parent_section, 'object_type': 'section'})
        
        

    def delete_section(self):
        """Deletes a section"""
        
        selected_section = self.QT_tree.selectedItem().object_reference
        section_id = selected_section['section_id']
        
        parent_street = self.QT_tree.selectedItem().parent().object_reference
        
        
        if len(parent_street['sections'].keys()) < 2:
        	qt.QMessageBox.critical(self,
        				"Insuficient number of sections!",
        				"The street must have at one section!",
        				qt.QMessageBox.Ok)
        	return
        
        
        (error, error_message) = can_delete_section(selected_section, self.tree)
        if error == 1:
        	qt.QMessageBox.critical(self, "Section in use!", error_message, qt.QMessageBox.Ok)
        	return
        
        # deletes all lanesets and lanes too
        for laneset_id, laneset_properties in selected_section['lanesets'].items():
        	for lane_id in laneset_properties['lanes'].keys():
        		del self.flat_tree[lane_id]
        	del self.flat_tree[laneset_id]
        
        del parent_street['sections'][section_id]
        del self.flat_tree[section_id]
        
        self.update_tree_and_QT_tree({'object_reference': parent_street, 'object_type': 'street'})
        
        

    def delete_street(self):
        """Deletes a street"""
        
        selected_street = self.QT_tree.selectedItem().object_reference
        street_id = selected_street['street_id']
        parent_item = self.QT_tree.selectedItem().parent()
        
        network_id = self.tree.keys()[0]
        objects = self.tree[network_id]
        
        (error, error_message) = can_delete_street(selected_street, self.tree)
        if error == 1:
        	qt.QMessageBox.critical(self, "Street in use!", error_message, qt.QMessageBox.Ok)
        	return
        
        # deletes all sections, lanesets and lanes too
        for section_id, section_properties in selected_street['sections'].items():
        	for laneset_id, laneset_properties in section_properties['lanesets'].items():
        		for lane_id in laneset_properties['lanes'].keys():
        			del self.flat_tree[lane_id]
        		del self.flat_tree[laneset_id]
        	del self.flat_tree[section_id]
        
        del objects['streets'][street_id]
        del self.flat_tree[street_id]
        
        # selects the parent item on the QT tree and makes sure the tree remains expanded
        self.QT_tree.setSelected(parent_item, 1)
        selected_item = self.QT_tree.selectedItem()
        self.QT_tree.setOpen(selected_item, 1)
        self.QT_tree.ensureItemVisible(selected_item)
        
        
        self.update_tree_and_QT_tree({})
        
        

    def delete_node(self):
        """Deletes a node"""
        
        selected_node = self.QT_tree.selectedItem().object_reference
        node_id = selected_node['node_id']
        parent_item = self.QT_tree.selectedItem().parent()
        
        network_id = self.tree.keys()[0]
        objects = self.tree[network_id]
        
        used_by_laneset = -1
        if len(selected_node['__lanesets_in']) != 0:
        	used_by_laneset = selected_node['__lanesets_in'].keys()[0]
        
        if len(selected_node['__lanesets_out']) != 0:
        	used_by_laneset = selected_node['__lanesets_out'].keys()[0]
        	
        
        if used_by_laneset != -1:
        	err = "This node is being used in a street (in <font color=red>laneset #%s</font>, " % used_by_laneset
        	err += "for ex., maybe in others)!"
        	qt.QMessageBox.critical(self, "Node in use!", err, qt.QMessageBox.Ok)
        	return
        
        for i in objects['sources'].values():
        	if i['located_at_node'] == node_id:
        		err = "This node is being used in the <font color=red>source #%s!</font>" % i['source_id']
        		qt.QMessageBox.critical(self, "Node in use!", err, qt.QMessageBox.Ok)
        		return
        
        for i in objects['sinks'].values():
        	if i['located_at_node'] == node_id:
        		err = "This node is being used in the <font color=red>sink #%s!</font>" % i['sink_id']
        		qt.QMessageBox.critical(self, "Node in use!", err, qt.QMessageBox.Ok)
        		return
        
        del objects['nodes'][node_id]
        del self.flat_tree[node_id]
        
        # selects the parent item on the QT tree and makes sure the tree remains expanded
        self.QT_tree.setSelected(parent_item, 1)
        selected_item = self.QT_tree.selectedItem()
        self.QT_tree.setOpen(selected_item, 1)
        self.QT_tree.ensureItemVisible(selected_item)
        
        
        self.update_tree_and_QT_tree({})
        
        
        

    def delete_source(self):
        """Deletes a source"""
        
        selected_source = self.QT_tree.selectedItem().object_reference
        source_id = selected_source['source_id']
        parent_item = self.QT_tree.selectedItem().parent()
        
        network_id = self.tree.keys()[0]
        objects = self.tree[network_id]
        
        del objects['sources'][source_id]
        del self.flat_tree[source_id]
        
        # selects the parent item on the QT tree and makes sure the tree remains expanded
        self.QT_tree.setSelected(parent_item, 1)
        selected_item = self.QT_tree.selectedItem()
        self.QT_tree.setOpen(selected_item, 1)
        self.QT_tree.ensureItemVisible(selected_item)
        
        
        self.update_tree_and_QT_tree({})
        
        

    def delete_sink(self):
        """Deletes a sink"""
        
        selected_sink = self.QT_tree.selectedItem().object_reference
        sink_id = selected_sink['sink_id']
        parent_item = self.QT_tree.selectedItem().parent()
        
        network_id = self.tree.keys()[0]
        objects = self.tree[network_id]
        
        del objects['sinks'][sink_id]
        del self.flat_tree[sink_id]
        
        # selects the parent item on the QT tree and makes sure the tree remains expanded
        #self.QT_tree.setSelected(parent_item, 1)
        self.QT_tree.setCurrentItem(parent_item)
        selected_item = self.QT_tree.selectedItem()
        self.QT_tree.setOpen(selected_item, 1)
        self.QT_tree.ensureItemVisible(selected_item)
        
        
        self.update_tree_and_QT_tree({})
        
        

    def create_popups(self):
        """Creates all popups and fills them with the apropriate options (ex: the popup which will be
           fired when a laneset is clicked contains the options (delete laneset, add new lane)"""
        
        self.lane_popup = QPopupMenu(self.QT_tree)
        self.lane_popup.insertItem("Delete this lane", self.delete_lane)
        
        self.laneset_popup = QPopupMenu(self.QT_tree)
        self.laneset_popup.insertItem("Add new lane", self.add_lane_popup)
        self.laneset_popup.insertSeparator()
        self.laneset_popup.insertItem("Delete this laneset", self.delete_laneset)
        
        self.section_popup = QPopupMenu(self.QT_tree)
        self.section_popup.insertItem("Add new laneset", self.add_laneset_popup)
        self.section_popup.insertSeparator()
        self.section_popup.insertItem("Delete this section", self.delete_section)
        
        
        self.street_popup = QPopupMenu(self.QT_tree)
        self.street_popup.insertItem("Add new section", self.add_section_popup)
        self.street_popup.insertSeparator()
        self.street_popup.insertItem("Delete this street", self.delete_street)
        
        
        self.node_popup = QPopupMenu(self.QT_tree)
        self.node_popup.insertItem("Delete this node", self.delete_node)
        
        self.source_popup = QPopupMenu(self.QT_tree)
        self.source_popup.insertItem("Delete this source", self.delete_source)
        
        self.sink_popup = QPopupMenu(self.QT_tree)
        self.sink_popup.insertItem("Delete this sink", self.delete_sink)
        
        self.streets_popup = None
        
        self.traffic_lights_popup = None
        self.tlight_popup = QPopupMenu(self.QT_tree)
        self.tlight_popup.insertItem("Add new signalplan", self.add_signalplan)
        self.tlight_popup.insertSeparator()
        self.tlight_popup.insertItem("Delete this traffic light", self.delete_trafficlight)
        
        self.signalplan_popup = QPopupMenu(self.QT_tree)
        self.signalplan_popup.insertItem("Delete this signalplan", self.delete_signalplan)
        
        self.nodes_popup = QPopupMenu(self.QT_tree)
        self.nodes_popup.insertItem("Add new node", self.add_node)
        
        self.sources_popup = QPopupMenu(self.QT_tree)
        self.sources_popup.insertItem("Add new source", self.add_source)
        
        self.sinks_popup = QPopupMenu(self.QT_tree)
        self.sinks_popup.insertItem("Add new sink", self.add_sink)
        
        self.network_popup = None
        self.settings_popup = None
        
        
        

    def get_free_id(self):
        """Returns and object ID which was not yet used"""
        
        i = 1
        while 1:
        	if i not in self.used_ids:
        		self.used_ids.append(i)
        		self.used_ids.sort()
        		return i
        	i+=1
        
        

    def update_tree_and_QT_tree(self,a0):
        """Updates the tree (ie: calls complement_tree) and rebuilds the QT tree to
           reflect these updates. Receives as parameter the item which should be
           selected on the QT tree after its reconstruction"""
        
        item = a0
        
        group_items = ('streets', 'nodes', 'sources', 'sinks', 'traffic_lights')
        
        if len(item) == 0:
            selected_item = self.QT_tree.selectedItem()
            selected_item_text = selected_item.text(0)
            selected_item_type = selected_item_text
        else:
            selected_item_type = item['object_type']
            selected_item_object = item['object_reference']
        
        # selected_item = self.QT_tree.selectedItem()
        # previous_item_text = selected_item.text(0)
        
        self.tree = complement_tree(self.tree, self.flat_tree)
        self.build_QT_tree(self, self.tree)
        
        # previous_item = self.QT_tree.findItem(previous_item_text, 0)
        # self.QT_tree.setSelected(previous_item, 1)
        # selected_item = self.QT_tree.selectedItem()
        
        # print "aparentemente pode ser", previous_item
        # print "caralho", selected_item.text(0)
        
        # self.QT_tree.setOpen(selected_item, 1)
        # self.QT_tree.ensureItemVisible(selected_item)
        
        
        # finds the previously selected item. if it was a group_item, search it by the text; otherwise, by the id
        if selected_item_type in group_items:
            previous_item = self.QT_tree.findItem(selected_item_text, 0)
        elif selected_item_type == 'settings':
            settings = self.QT_tree.findItem("settings", 0)
            previous_item = settings
        else:
            network = self.QT_tree.findItem("network", 0)
            iterator = QListViewItemIterator(network);
            while (iterator.current()):
                previous_item = iterator.current()
                if (previous_item.object_type not in group_items) and (previous_item.object_type == selected_item_type):
                    id_attribute = "%s_id" % selected_item_type
                    if cmp_ids(previous_item.object_reference[id_attribute], selected_item_object[id_attribute]):
                        break
                iterator += 1
        
        
        # if modifying the network tab, explicity makes sure it will remain opened and expanded
        if previous_item.object_type == 'network':
        	self.QT_tree.setSelected(self.QT_tree.firstChild(), 1)
        	selected_item = self.QT_tree.selectedItem()
        	self.QT_tree.setOpen(selected_item, 1)
        	self.QT_tree.ensureItemVisible(selected_item)
        else:
        	# re-selects the previously selected item
        	self.QT_tree.setCurrentItem(previous_item)
        	self.QT_tree.setOpen(previous_item, 1)
        	self.QT_tree.ensureItemVisible(previous_item)
        
        

    def update_phases_duration(self):
        
        if self.do_not_update_phases:
        	return
        
        
        # print "updating!!!"
        selected_signalplan = self.QT_tree.selectedItem().object_reference
        
        available_phases_widget = self.stack.visibleWidget().child("available_phases")
        current_phase_id = int(str(available_phases_widget.currentText()))
        
        
        phase_duration_widget = self.stack.visibleWidget().child("signalplan_phase_duration")
        new_duration = phase_duration_widget.value()
        
        phases_to_update = [i for i in selected_signalplan['phases'].keys()
        		    if i > current_phase_id]
        
        # print "phases to update:", phases_to_update
        
        current_phase_start = selected_signalplan['phases'][current_phase_id]['iteration_start']
        selected_signalplan['phases'][current_phase_id]['iteration_end'] = current_phase_start + new_duration - 1
        current_phase_end = selected_signalplan['phases'][current_phase_id]['iteration_end']
        
        for i in phases_to_update:
        	phase_length = selected_signalplan['phases'][i]['iteration_end'] - selected_signalplan['phases'][i]['iteration_start'] + 1
        	selected_signalplan['phases'][i]['iteration_start'] = current_phase_end + 1
        	selected_signalplan['phases'][i]['iteration_end'] = current_phase_end + phase_length
        	current_phase_end = selected_signalplan['phases'][i]['iteration_end']
        
        # print "*-"*65
        # pretty_printer.pprint(selected_signalplan)
        # print "*-"*65
        
        

    def add_phase(self):
        
        selected_signalplan = self.QT_tree.selectedItem().object_reference
        
        phases_ids = selected_signalplan['phases'].keys()
        phases_ids.sort()
        
        end_of_last_phase = selected_signalplan['phases'][phases_ids[-1]]['iteration_end']
        # print "---------->", phases_ids, phases_ids[-1]
        
        
        parent_trafficlight = self.QT_tree.selectedItem().parent().object_reference
        signalplans = parent_trafficlight['signalplans']
        
        new_phase_id = -1
        for sp in signalplans.values():
        	phases = sp['phases'].values()
        	for ph in phases:
        		if ph['phase_id'] > new_phase_id:
        			new_phase_id = ph['phase_id']
        
        
        new_phase_id += 1
        
        
        selected_signalplan['phases'][new_phase_id] = {'directions': [],
        					       'iteration_end': end_of_last_phase + 30,
        					       'iteration_start': end_of_last_phase + 1,
        					       'phase_id': new_phase_id}
        
        
        available_phases_widget = self.stack.visibleWidget().child("available_phases")
        available_phases_widget.insertItem(str(new_phase_id))
        available_phases_widget.setSelected(new_phase_id, 1)
        available_phases_widget.ensureCurrentVisible()
        
        # print "*-"*65
        # pretty_printer.pprint(selected_signalplan)
        # print "*-"*65
        
        

    def delete_phase(self):
        
        # print "deleting!!"
        
        selected_signalplan = self.QT_tree.selectedItem().object_reference
        available_phases_widget = self.stack.visibleWidget().child("available_phases")
        
        if len(selected_signalplan['phases'].keys()) < 2:
        	qt.QMessageBox.critical(self,
        				"Insuficient number of phases!",
        				"The signalplan must have at one phase!",
        				qt.QMessageBox.Ok)
        	return
        
        
        current_phase_id = int(str(available_phases_widget.currentText()))
        
        del(selected_signalplan['phases'][current_phase_id])
        
        phases_to_update = [i for i in selected_signalplan['phases'].keys()
        		    if i > current_phase_id]
        
        
        # update the ids of the phases that follow the one we just deleted
        for i in phases_to_update:
        	selected_signalplan['phases'][i-1] = selected_signalplan['phases'][i]
        	selected_signalplan['phases'][i-1]['phase_id'] = i-1
        	del(selected_signalplan['phases'][i])
        
        
        available_phases_widget.clear()
        all_phases = [i for i in selected_signalplan['phases'].keys()]
        all_phases.sort()
        available_phases_widget.insertStrList([str(i) for i in all_phases])
        available_phases_widget.setSelected(0, 1)
        available_phases_widget.ensureCurrentVisible()
        
        self.update_phases_duration()
        
        

    def paint_directions(self):
        
        # print "\n\n\n\n-::::::::::::::::::::::::::::::"
        
        selected_signalplan = self.QT_tree.selectedItem().object_reference
        signalplan_id = selected_signalplan['signalplan_id']
        
        available_phases_widget = self.stack.visibleWidget().child("available_phases")
        current_phase_id = int(str(available_phases_widget.currentText()))
        current_phase_iter_start = selected_signalplan['phases'][current_phase_id]['iteration_start']
        current_phase_iter_end = selected_signalplan['phases'][current_phase_id]['iteration_end']
        
        phase_duration_widget = self.stack.visibleWidget().child("signalplan_phase_duration")
        
        # set a flag to avoid the calling of 'update_phases_duration()'
        self.do_not_update_phases = 1
        phase_duration_widget.setValue(current_phase_iter_end-current_phase_iter_start+1)
        self.do_not_update_phases = 0
        
        # pretty_printer.pprint(selected_signalplan['phases'])
        # print "direcoes da fase atual:"
        directions = selected_signalplan['phases'][current_phase_id]['directions']
        # pretty_printer.pprint(directions)
        
        canvas = self.stack.visibleWidget().child("drawing_frame").canvas()
        polygons = [i for i in canvas.allItems() if i.__class__ == my_qcanvaspolygon]
        
        # remove the previously drawn connecting lines from the canvas
        connecting_lines = [i for i in canvas.allItems() if i.__class__ == my_qconnecting_line]
        for i in connecting_lines:
        	i.setCanvas(None)
        
        # remove the previously drawn arrows from the canvas
        arrows = [i for i in canvas.allItems() if i.__class__ == qtcanvas.QCanvasPolygon]
        for i in arrows:
                if i.points().size() == 4:
                    i.setCanvas(None)
        
        connecting_point  = {}  # a dictionary which associated the id of a {lane,laneset} with the
                                # (x,y) coordinates of its connecting point with other objects
        
        for i in polygons:
            (class_name, object_ref) = i.class_and_ref()
            connecting_point[object_ref['%s_id'%class_name]] = (i.connecting_x, i.connecting_y)
        
        
        pen = qt.QPen(qt.QColor(60, 70, 200), 5, qt.Qt.SolidLine)
        
                  
        cur_color=10
        for d in directions:
            start_x = connecting_point[d[0]][0]
            start_y = connecting_point[d[0]][1]
            end_x   = connecting_point[d[1]][0]
            end_y   = connecting_point[d[1]][1]
        
            connecting_line = my_qconnecting_line(canvas)
            connecting_line.setPoints(start_x, start_y, end_x, end_y)
            connecting_line.setZ(1.0) # in order to appear above all the rest
            connecting_line.setPen(pen_colors[cur_color % len(pen_colors)])
            connecting_line.show()
        
            arrow_side_length = 15
            arrow_polygon = calculate_arrow(start_x, start_y, end_x, end_y, arrow_side_length, canvas)
            arrow_polygon.setPen(pen_colors[cur_color % len(pen_colors)])
            arrow_polygon.setBrush(brush_colors[cur_color % len(pen_colors)])
        
            arrow_polygon.show()
        
            cur_color += 0
        
        
        canvas.update()
        
        

    def __tr(self,s,c = None):
        return qApp.translate("editor",s,c)
